我一直在尝试使用ASP.NET Core构建我的第一个API项目。
一切都进行得很顺利,就是有一件事情。每当我尝试添加一个新的脚手架控制器(当然,先添加了我的模型),我就会遇到以下错误:
属性“Favor.Coordinates”的类型为“Geometry”,该类型不受当前数据库提供程序支持。要么更改属性CLR类型,要么使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”忽略该属性。
这是不言自明的;我有一个具有Geometry
类型(来自Postgis)的模型类,似乎会对Entity Framework造成问题。
我做了什么?
- 我创建了我的数据库并添加了Postgis扩展,以便能够使用几何数据类型
- 我添加了
Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite
包,以支持我项目中的Geometry
,如下面的教程所述:https://learn.microsoft.com/en-us/ef/core/modeling/spatial - 我添加了所有必需的Npgsql扩展,以使用PostgreSQL与ASP.NET,并从数据库生成了所有模型类
值得一提的是,我在生成我的模型之前也添加了NetTopologySuite
包,就像教程中所提到的一样。尽管NTS确实支持Geometry
,但每当我尝试使用Entity Framework添加一个脚手架API控制器时,我都会遇到上述错误。
为了进一步参考,这里是错误提到的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; }
}
}
我还在DB上下文中添加了
x => x.UseNetTopologySuite()
。有人知道我做错了什么吗?错误提示中提到可以添加[NotMapped]
属性,但我确实希望该属性被映射。谢谢提前! 编辑:手动创建控制器(而不是通过脚手架),可以运行且不会出现错误,但如果尝试访问任何控制器端点的路由,则最终会出现相同的错误消息。