EF Core配置双一对多关联时出现object类型属性无法映射报错
问题根源定位
你碰到的映射报错的触发原因非常明确:
报错描述中提到的类型为
object的无法映射属性,就是Transaction实体类中冗余声明的这行代码:public object ReceiverId { get; internal set; }
EF Core的默认映射规则是,会自动扫描实体类中所有public可访问的属性,尝试将其纳入数据库映射范围。这个冗余属性的类型是object,既不属于数据库支持的基元类型,也不是有效实体类型,自然会直接触发映射异常。
具体修复步骤
- 第一步:删除冗余的错误属性
直接移除Transaction类里那行完全没有作用的代码:public object ReceiverId { get; internal set; }
你本身已经定义了正确的字符串类型外键ReceiverID,这行属性大概率是IDE补全自动生成、或者手动输入时冗余打出来的,存在属性名大小写不匹配、类型不匹配、访问权限错误的问题,对业务逻辑没有任何价值。 - 第二步:补充集合导航属性的默认初始化,避免后续空引用异常
修正ApplicationUser类里两个集合导航属性的初始化逻辑,避免运行时因为集合为null触发异常:public ICollection<Transaction> SendTransactions { get; set; } = new List<Transaction>(); public ICollection<Transaction> ReceiveTransactions { get; set; } = new List<Transaction>(); - 第三步:校验剩余关联配置的一致性
你当前写的两组Transaction和ApplicationUser的一对多关联配置是完全合规的,不需要额外修改:- 导航属性
Sender/Receiver和对应外键SenderID/ReceiverID的匹配关系没有逻辑冲突 - 删除行为配置为
Restrict,刚好规避了两个外键指向同一张表时的级联删除循环冲突,逻辑自洽。
- 导航属性
后续注意事项
目前ApplicationUser类里还声明了Account导航属性,如果你没有为这个一对一关联补对应的Fluent API配置,删掉冗余属性之后大概率会触发新的映射报错,记得在OnModelCreating方法里补充对应的关联规则即可。
内容的提问来源于stack exchange,提问作者Vlad-Marin Calota
相关产品推荐
相关产品推荐

