EF Core调用HasForeignKey配置一对一关联抛出System.NullReferenceException如何解决
EF Core 一对一配置空引用异常解决方法
异常原因
这个异常是EF Core内部处理外键配置惯例时触发的空引用,通常由重复配置、版本bug或者关系配置不规范导致。
解决方案
- 删除实体类上的重复外键配置
检查EnPpTime和EnPpTimeInMeta两个实体的导航属性、主键字段上是否标注了[ForeignKey]特性,若存在直接删除,不要同时用特性和FluentAPI两种方式配置同一组外键关系,两者冲突会触发该内部异常。 - 调整FluentAPI配置写法,明确实体主键和关系顺序
将原有配置修改为如下形式:
// 显式配置两个实体的主键 builder.Entity<EnPpTime>().HasKey(x => x.Id); builder.Entity<EnPpTimeInMeta>().HasKey(x => x.Id); // 从依赖端开始配置一对一关系 builder.Entity<EnPpTimeInMeta>() .HasOne(m => m.EnPpTime) .WithOne(t => t.EnPpTimeInMeta) .HasForeignKey<EnPpTimeInMeta>(m => m.Id);
- 升级EF Core版本
该空引用是EF Core 3.1、5.0版本的已知内部bug,若当前使用的是低版本EF Core,直接升级到6.0及以上的LTS版本即可修复该问题。 - 检查导航属性配置
确认两个实体对应的导航属性均为public修饰,拥有合法的get/set访问器,且没有被[NotMapped]特性标记为忽略映射。
内容的提问来源于stack exchange,提问作者Tan Nguyen
相关产品推荐
相关产品推荐

