【问题标题】:The entity type 'DbGeography' requires a primary key to be defined实体类型“DbGeography”需要定义主键
【发布时间】: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://stackoverflow.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,是的。

标签: c# entity-framework-core .net-5


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-27
    • 2018-08-13
    • 2019-09-13
    • 1970-01-01
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多