Noo*_*ntu 3 c# asp.net geometry entity-framework postgis
我一直在尝试使用 ASP.NET Core 构建我的第一个 API 项目。
一切都很顺利,除了一件事。每当我尝试添加一个新的脚手架控制器时(当然是在添加我的模型之后),我会收到以下错误:
属性“Favor.Coordinates”属于“Geometry”类型,当前数据库提供程序不支持该属性。使用“[NotMapped]”特性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”更改属性 CLR 类型或忽略该属性。
这是不言自明的;我有一个Geometry类型(来自 Postgis)的模型类,这似乎导致了实体框架的问题。
我做了什么?
Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite包以支持Geometry我的项目,如以下教程中所述:https : //docs.microsoft.com/en-us/ef/core/modeling/spatial值得一提的是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; }
}
}
Run Code Online (Sandbox Code Playgroud)
我还添加x => x.UseNetTopologySuite()到我的数据库上下文中。有谁知道我可能做错了什么?我总是可以添加[NotMapped]错误提到的属性,但我确实希望映射此属性。
提前致谢!
编辑:手动创建控制器(而不是通过脚手架)工作并且不会引发任何错误,但如果我尝试访问任何控制器端点的路由,最终会出现相同的错误消息。
解决了。事实证明,我不应该只包含x => x.UseNetTopologySuite()在 DB Context 文件中,还要包含在 Startup.cs 中。呸!
services.AddDbContext<MyDBContext>(options =>
options.UseNpgsql(Configuration.GetConnectionString("MyDatabaseString"), x => x.UseNetTopologySuite()) );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
598 次 |
| 最近记录: |