EF Core报错无法确定导航属性Product.ProductRelations对应关系如何解决
问题根本原因
报错是因为EF Core 约定无法自动识别多导航指向同一实体的对应关系:
ProductRelation类中同时存在两个指向Product的导航属性:Product、RelatedProduct,对应外键为ProductId、RelatedProductId- 而
Product类中只有一个反向导航属性ProductRelations,EF Core 无法判断这个集合到底是对应ProductRelation.Product的反向关联,还是对应ProductRelation.RelatedProduct的反向关联,因此抛出异常 - 删除
RelatedProduct属性后,ProductRelation中只剩一个指向Product的导航,EF Core 可以通过约定自动匹配,所以报错消失
解决方案(无需修改OnModelCreating的注解配置方案)
只需要给导航属性添加 [InverseProperty] 注解明确对应关系即可,修改后的代码如下:
Product类
using System.ComponentModel.DataAnnotations.Schema; public class Product { public int Id { get; set; } public string SKU { get; set; } public string Name { get; set; } public double Price { get; set; } // 明确当前集合对应ProductRelation类的Product导航属性 [InverseProperty(nameof(ProductRelation.Product))] public IList<ProductRelation> ProductRelations { get; set; } // 如需查询当前商品被哪些其他商品关联,可额外增加以下反向导航,按需添加即可 // [InverseProperty(nameof(ProductRelation.RelatedProduct))] // public IList<ProductRelation> RelatedToMeRelations { get; set; } }
ProductRelation类
using System.ComponentModel.DataAnnotations.Schema; public class ProductRelation { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public int ProductId { get; set; } public int RelatedProductId { get; set; } [ForeignKey(nameof(ProductId))] public Product Product { get; set; } [ForeignKey(nameof(RelatedProductId))] public Product RelatedProduct { get; set; } }
以上配置完全依赖注解即可符合EF Core的关联匹配规则,无需手动编写OnModelCreating配置代码。
内容的提问来源于stack exchange,提问作者Mads
相关产品推荐
相关产品推荐

