.NET 6升级后单表EF Core无法获取鉴别器值问题排查
移除不必要的鉴别器配置:该实体无继承关系的前提下,
HasDiscriminator(x => x.Id)属于冗余配置。EF Core 6.0对鉴别器的校验逻辑比3.1更严格,用主键作为鉴别器会导致表达式树构建时的类型匹配异常。直接删除实体配置中的HasDiscriminator相关代码,重新编译测试。统一EF Core依赖版本:确认项目中所有EF Core相关包(如
Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.SqlServer)的版本均为6.0.x,避免混合不同版本导致的兼容性问题。检查项目文件(.csproj)中的包引用,确保版本一致。检查隐式继承/全局配置影响:排查
OpOrganisation是否间接继承了带有鉴别器配置的基类,或全局模型配置中是否对该实体类型设置了默认鉴别器。可通过代码modelBuilder.Model.FindEntityType(typeof(OpOrganisation)).GetDiscriminator()查看当前鉴别器配置详情,确认是否存在重复或冲突的配置。清理编译缓存与模型缓存:删除项目的
bin、obj目录,重新生成解决方案;开发环境下可在DbContext配置中添加.DisableModelCaching()禁用模型缓存,验证是否为旧缓存导致的配置残留问题。验证鉴别器属性的映射与数据库列一致性:检查实体
Id属性与数据库intOrganisationId列的类型匹配性(是否均为非空int),确认EF Core的映射配置中未出现类型不匹配的情况(如误将int映射为nullable int)。测试移除鉴别器后的迁移生成:删除鉴别器配置后,重新生成迁移,确认EF Core不再尝试处理该实体的鉴别器逻辑,再执行查询验证是否解决异常。
内容的提问来源于stack exchange,提问作者Andrew Grothe

