ASP.NET Core 2.1因模型InverseProperty引发启动崩溃问题求助
根据你提供的异常栈信息,这个Value cannot be null. Parameter name: type异常是EF Core在处理反向属性约定(InversePropertyAttributeConvention)时触发的,核心原因是反射环节传入的类型参数为null,大概率是实体类的导航属性配置出了问题。下面是几个针对性的排查和解决方向:
检查
[InverseProperty]特性的参数是否合法
这个异常最常见的诱因是在导航属性上使用[InverseProperty]时传入了null参数,或者参数拼写错误导致EF找不到对应的目标属性。比如错误写法:public class Product { [InverseProperty(null)] // 这里参数为null直接触发问题 public ICollection<OrderItem> OrderItems { get; set; } }修正方式:确保特性参数是目标实体中对应导航属性的正确名称,推荐用
nameof来避免拼写错误:public class Product { [InverseProperty(nameof(OrderItem.Product))] public ICollection<OrderItem> OrderItems { get; set; } } public class OrderItem { public Product Product { get; set; } }验证导航属性的类型定义是否正确
如果某个导航属性的类型定义不完整(比如泛型集合缺少具体类型),EF无法解析出正确的实体类型,也会在反射环节抛出null参数异常。比如错误写法:public class User { public ICollection Orders { get; set; } // 缺少泛型参数,EF无法识别目标类型 }修正后:
public class User { public ICollection<Order> Orders { get; set; } }确认所有相关实体都已注册到DbContext
如果你的实体之间存在关联,但部分实体没有通过DbSet<>或者OnModelCreating中的modelBuilder.Entity<>注册到DbContext中,EF在解析关系时可能会出现类型解析失败的情况。确保所有参与关联的实体都被正确注册。升级到EF Core 2.1正式版或更高稳定版本
你当前使用的是EF Core 2.1 RC1,这是预发布版本,本身可能存在一些已知的bug。正式版的EF Core 2.1已经修复了RC阶段的诸多问题,升级到稳定版本大概率能解决这类约定处理的异常。
内容的提问来源于stack exchange,提问作者Hecatonchires

