Entity Framework Core无法将官方类型映射到PostgreSQL列问题求解
EF Core 配合PostgreSQL 14 dvdrental数据库映射错误解决方案
前置排查步骤
- 确认你安装的
Npgsql.EntityFrameworkCore.PostgreSQL包版本和你的EF Core主版本匹配:ASP.NET Core 5 配套的 EF Core 5 需使用 5.x 版本的Npgsql EF Core提供程序,版本不匹配会出现原生支持的类型无法映射的问题。 - 确认DbContext注册时使用的是
UseNpgsql()方法,误用其他数据库提供程序会直接导致PostgreSQL专属类型无法识别。
错误1:NpgsqlTsVector类型不支持
报错核心原因是提供程序未识别到tsvector类型映射,优先使用Fluent API配置(优先级高于数据注解,可解决[NotMapped]、[Column]特性不生效的问题):
- 若不需要使用
Fulltext字段做全文检索,直接在DbContext的OnModelCreating方法中配置忽略该字段:
modelBuilder.Entity<Film>() .Ignore(f => f.Fulltext);
- 若需要保留该字段,配置指定列类型即可:
modelBuilder.Entity<Film>() .Property(f => f.Fulltext) .HasColumnType("tsvector");
错误2:string[]类型无法映射
PostgreSQL原生支持数组类型映射,出现该报错可通过Fluent API强制指定列类型解决:
modelBuilder.Entity<Film>() .Property(f => f.SpecialFeatures) .HasColumnType("text[]");
若不需要使用该字段也可直接配置忽略:
modelBuilder.Entity<Film>() .Ignore(f => f.SpecialFeatures);
所有配置完成后,删除之前生成失败的迁移记录,重新执行Add-Migration命令即可正常生成迁移。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

