【问题标题】:The property X is of type 'Geometry' which is not supported by the current database provider属性 X 是当前数据库提供程序不支持的 \'Geometry\' 类型
【发布时间】:2023-01-15 08:17:38
【问题描述】:

我获得了一个 PostgreSQL 数据库,目前正在尝试将 EF Core 绑定到它。由于数据库已经存在,我试图搭建一个上下文,并且我成功地收到了类似以下的警告:

找不到数据类型为“x.geometry”的列“x.Polygons.Shape”的类型映射。跳过列。

我在搭建脚手架时跳过了所有这些列,并尝试手动恢复它们:

public sealed class Polygon
{
    public int Id { get; set; }
    public DateOnly CreationDate { get; set; }
    public DateOnly ModificationDate { get; set; }
    public DateOnly SurveyDate { get; set; }
    public Geometry Shape { get; set; } //This (and similar) column was added manually
}

之后,我将脚手架实体配置提取并修补到一个单独的类中,如下所示:

public sealed class PolygonConfiguration : IEntityTypeConfiguration<Polygon>
{
    public void Configure(EntityTypeBuilder<Polygon> builder)
    {
        builder.ToTable("Polygons", Constants.DatabaseScheme);
        builder.HasIndex(e => e.Id, "idx_Polygons_ID");
        builder.Property(e => e.Id).HasColumnName("ID");
        builder.Property(x => x.Shape).HasColumnType("geometry"); //This one was added manually as well
    }
}

引用了所有必需的库并注册了我的上下文:

builder.Services.AddDbContext<IMyContext, MyContext>(options =>
    options.UseNpgsql(builder.Configuration.GetConnectionString(Constants.ConnectionString)));

但它不起作用。我尝试查询 Geometry 类型的实体。我还尝试创建初始 EF 迁移(以重新创建数据库)但最终出现了完全相同的错误:

当前数据库提供程序不支持属性“Polygon.Shape”的类型“Geometry”。更改属性 CLR 类型,或使用“[NotMapped]”属性或使用“OnModelCreating”中的“EntityTypeBuilder.Ignore”忽略该属性。

附言我已经检查了一些指南 herehere - 他们没有帮助,因为我已经满足了所有先决条件

【问题讨论】:

  • 您缺少 UseNetTopologySuite
  • @ErikEJ,非常感谢,我的眼睛真的很模糊。请将其作为答案发布,以便我解决它:)

标签: c# postgresql entity-framework-core postgis


【解决方案1】:

你只是缺少:

UseNetTopologySuite

EF Core 支持使用 NetTopologySuite spatial library 映射到空间数据类型。

EF Core Provider Spatial NuGet Package
Microsoft.EntityFrameworkCore.SqlServer Microsoft.EntityFrameworkCore.SqlServer.NetTopologySuite
Microsoft.EntityFrameworkCore.Sqlite Microsoft.EntityFrameworkCore.Sqlite.NetTopologySuite
Microsoft.EntityFrameworkCore.InMemory NetTopologySuite
Npgsql.EntityFrameworkCore.PostgreSQL Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite
Pomelo.EntityFrameworkCore.MySql Pomelo.EntityFrameworkCore.MySql.NetTopologySuite
Devart.Data.MySql.EFCore Devart.Data.MySql.EFCore.NetTopologySuite
Devart.Data.PostgreSql.EFCore Devart.Data.PostgreSql.EFCore.NetTopologySuite
Devart.Data.SQLite.EFCore Devart.Data.SQLite.EFCore.NetTopologySuite
Teradata.EntityFrameworkCore Teradata.EntityFrameworkCore.NetTopologySuite

【讨论】:

  • 我应该把它放在哪里?
  • @user230910https://learn.microsoft.com/da-dk/ef/core/modeling/spatial
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
  • 1970-01-01
  • 2022-12-16
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多