最新版Npgsql搭配Entity Framework枚举类型转换报错问题
解决方案
以下是针对该问题的几个排查和解决方向:
检查数据库连接搜索路径
PostgreSQL 默认可能未将自定义 schema 加入搜索路径,导致查询时无法找到枚举类型。可以在连接字符串中显式指定搜索路径:Server=localhost;Database=your_db;Username=user;Password=pass;Search Path=schema,public;也可以通过 SQL 为数据库用户设置默认搜索路径:
ALTER ROLE your_user SET search_path TO schema, public;确认枚举映射的大小写一致性
PostgreSQL 对带双引号的标识符大小写敏感,检查代码中MapEnum<Status>("schema.status")里的 schema 和枚举名称是否与数据库中完全一致。可通过以下 SQL 确认实际的枚举信息:SELECT typname AS enum_name, nspname AS schema_name FROM pg_type JOIN pg_namespace ON pg_type.typnamespace = pg_namespace.oid WHERE typname = 'status';显式指定实体属性的列类型
确保 EF 实体属性与数据库枚举类型的映射生效,在 Fluent API 中显式配置列类型:protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<YourEntity>() .Property(e => e.statuscode) .HasColumnType("schema.status"); }验证 Npgsql 版本兼容性
确保使用的 Npgsql 版本完全支持 PostgreSQL 16,推荐使用 Npgsql 8.0 及以上版本,避免版本适配问题。确认枚举类型存在于指定 schema
通过以下 SQL 验证枚举是否确实存在于目标 schema:SELECT enumlabel AS enum_value FROM pg_enum WHERE enumtypid = ( SELECT oid FROM pg_type WHERE typname = 'status' AND typnamespace = (SELECT oid FROM pg_namespace WHERE nspname = 'schema') );
内容的提问来源于stack exchange,提问作者user22523049
相关产品推荐
相关产品推荐

