【发布时间】:2020-12-25 11:06:52
【问题描述】:
我一直在尝试使用 ASP.NET Core 构建我的第一个 API 项目。
一切都很顺利,除了一件事。每当我尝试添加新的脚手架控制器时(当然是在添加模型之后),我都会收到以下错误:
“Favor.Coordinates”属性属于“几何”类型,当前数据库提供程序不支持。更改属性 CLR 类型或使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”忽略该属性。
这是不言自明的;我有一个具有Geometry 类型(来自 Postgis)的模型类,这似乎会导致实体框架出现问题。
我做了什么?
- 我已经创建了我的数据库并添加了 Postgis 扩展,以便能够使用几何数据类型
- 我已经在我的项目中添加了
Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite包来支持Geometry,详见以下教程:https://docs.microsoft.com/en-us/ef/core/modeling/spatial - 我已经添加了所有必需的 Npgsql 扩展来使用 PostgreSQL 和 ASP.NET,并从数据库生成所有模型类
值得一提的是,正如教程中提到的那样,我还在生成模型之前添加了 NetTopologySuite 包。然而,每当我尝试使用实体框架添加脚手架 API 控制器时,都会收到上述错误,尽管 NTS 确实支持 Geometry。
为了进一步参考,这里是错误提到的Favor 类:
using System;
using System.Collections.Generic;
using NetTopologySuite.Geometries;
namespace FavorAPI.Models
{
public partial class Favor
{
public Favor()
{
Payment = new HashSet<Payment>();
Request = new HashSet<Request>();
}
public int Idfavor { get; set; }
public string Description { get; set; }
public string Title { get; set; }
public DateTime? Creationtime { get; set; }
public DateTime? Happeningtime { get; set; }
public double? Price { get; set; }
public short? Estimatedtime { get; set; }
public short? Maxpeople { get; set; }
public short? Currentpeople { get; set; }
public Geometry Coordinates { get; set; } //<-- Problematic!
public int? Idstatus { get; set; }
public int? Idposter { get; set; }
public int? Idcategory { get; set; }
public virtual Category IdcategoryNavigation { get; set; }
public virtual Individual IdposterNavigation { get; set; }
public virtual Favorstatus IdstatusNavigation { get; set; }
public virtual ICollection<Payment> Payment { get; set; }
public virtual ICollection<Request> Request { get; set; }
}
}
我还在我的数据库上下文中添加了x => x.UseNetTopologySuite()。有谁知道我做错了什么?我总是可以添加错误提到的[NotMapped] 属性,但我确实希望映射此属性。
提前致谢!
编辑:手动创建控制器(而不是通过脚手架)可以正常工作并且不会引发任何错误,但如果我尝试访问到任何控制器端点的路由,最终会出现相同的错误消息。
【问题讨论】:
标签: c# asp.net entity-framework geometry postgis