【发布时间】: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”忽略该属性。
【问题讨论】:
-
您缺少 UseNetTopologySuite
-
@ErikEJ,非常感谢,我的眼睛真的很模糊。请将其作为答案发布,以便我解决它:)
标签: c# postgresql entity-framework-core postgis