实体类型“DbGeography”需要定义主键

Posted

技术标签:

【中文标题】实体类型“DbGeography”需要定义主键【英文标题】:The entity type 'DbGeography' requires a primary key to be defined 【发布时间】:2021-07-23 23:15:03 【问题描述】:

我有一个使用 dotnet ef dbcontext 脚手架生成的实体:

public partial class Company

    public DbGeography Location  get; set; 

数据库中的类型是地理。 DbGeography 来自 System.Data.Entity.Spatial 命名空间。

当我运行程序时,我收到以下错误:

实体类型“DbGeography”需要定义一个主键。如果 您打算使用无密钥实体类型,请在 'OnModelCreating'。

所以我在上下文中添加:

modelBuilder.Entity<DbGeography>(builder =>

    builder.HasNoKey();
);

出现以下错误:

无法确定导航所代表的关系 'DbGeography' 类型的'Company.Location'。要么手动配置 关系,或使用 '[NotMapped]' 忽略此属性 属性或在“OnModelCreating”中使用“EntityTypeBuilder.Ignore”。

在上下文中忽略它不是一种选择,因为我需要这个字段。无论如何,它会导致另一个错误。 ('DbGeographyWellKnownValue' 需要定义一个主键。)

我也不认为我需要添加关系,因为 DbGeography 不是另一个实体。

我该如何从这里开始?

我已经完成了这个“解决方案”,没有任何区别:https://***.com/a/53693654/7523633

【问题讨论】:

据sd.blackball.lv/library/…:“DbGeometry 和 DbGeography 类,从 5.0 版本开始就被经典 Entity Framework 支持,目前还不能在 Entity Framework Core 中使用。到目前为止,还没有映射用于 SQL Server 几何和地理列类型。”这是真的吗? EF Core 不支持 DbGeo @ErikEJ,EF Core 团队有什么解决方法,还是不要尝试? EF Core 和 SQL Server 支持 Spatial,是的。 【参考方案1】:

根据 ErikEJ,您可以使用空间类型。特别是对于 DbGeography,将 NetTopologySuite.Geometries 包中的类型更改为“Point”。 不要忘记添加 UseNetTopologySuite。

https://***.com/a/53693654/7523633

【讨论】:

以上是关于实体类型“DbGeography”需要定义主键的主要内容,如果未能解决你的问题,请参考以下文章

实体类型“X”需要定义主键

EF Core:实体类型“用户”需要定义主键

Entity Framework Core “实体类型‘XXX’需要定义一个主键。”

实体类型“IdentityUserLogin<string>”需要定义一个主键[重复]

ASP.NET Core Web API - 实体类型“IdentityUserRole<long>”需要定义主键

实体框架 DbGeography 给了我一个纬度 FormatException 错误