实体类型“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”需要定义主键的主要内容,如果未能解决你的问题,请参考以下文章
Entity Framework Core “实体类型‘XXX’需要定义一个主键。”
实体类型“IdentityUserLogin<string>”需要定义一个主键[重复]