.NET Core 3.1升级5.0后EF Core查询报NULL值调用错误如何解决
.NET Core 3.1升级至5.0后Entity Framework查询空值异常排查方向
核心原因说明
EF Core 5.0调整了外键必填性的默认推断逻辑,关联外键默认会被判定为必填字段,哪怕C#实体显式声明为可空类型,EF也会按非空类型读取数据,读到数据库NULL值时抛出转换异常。
具体排查方向
- 补全字段与关联的可空配置
在DbContext的OnModelCreating方法中,对Disclosures实体的FundSectionsID字段和关联关系显式设置可空,示例配置如下:
modelBuilder.Entity<Disclosures>(entity => { // 配置字段可空 entity.Property(e => e.FundSectionsID).IsRequired(false); // 如果配置了外键关联,关联关系也要设置可空 entity.HasOne(d => d.FundSection) .WithMany() .HasForeignKey(d => d.FundSectionsID) .IsRequired(false); });
- 核对可空引用类型配置影响
如果升级后项目开启了<Nullable>enable</Nullable>可空引用类型开关,EF Core 5.0会基于该配置推断字段必填性,确认FundSectionsID的可空声明没有被全局配置覆盖。 - 校验数据库表结构
直接查询Disclosures表的表结构,确认FundSectionsID字段确实为可空数值类型,排除升级过程中迁移脚本误将字段改为非空的可能性。 - 最小场景验证问题点
编写简化投影查询单独验证该字段的读取逻辑:
var testData = await m_DbContext.Disclosures .Select(d => new { d.DisclosuresID, d.FundSectionsID }) .ToListAsync();
如果该查询仍抛出相同异常,即可完全定位为FundSectionsID的EF映射配置问题,排除其他业务代码干扰。
内容的提问来源于stack exchange,提问作者Mx.Wolf
相关产品推荐
相关产品推荐

