繁体   English   中英

实体框架弄乱了我的多对多自我关系

[英]Entity Framework messes up my many-to-many self relation

我有一个产品表和一个BundleLink表,它们定义了哪个产品是另一个产品的捆绑产品。

    public class Product
    {
        public int Id { get; set; }

        public ICollection<BundleLink> MasterOf { get; set; }

        public ICollection<BundleLink> BundleOf { get; set; }
    }

    public class BundleLink
    {
        public int Id { get; set; }

        public Product Master { get; set; }

        public Product Bundle { get; set; }

        public int Quantity { get; set; }
    }

因此,当我使用主产品时,我会看到捆绑在指什么产品,以及其他方向。

但是实体框架在BundleLink表的sql服务器中创建4列。 它为我定义的产品字段创建一个,再创建两个外键,其中每个外键每次都为null,这取决于我添加捆绑的方向。 如何为EF定义哪个BundeLink集合属于哪个产品?

我希望我的描述是可以理解的。 提前致谢。

在实体框架中,您需要遵循EF 6和EF Core中的数据注释-ForeignKey属性。

ForeignKey属性用于在EF 6和EF Core中的两个实体之间的关系中配置外键。 它会覆盖默认约定。 根据默认约定,当EF的名称与相关实体的主键属性匹配时,EF会将其作为外键属性。

详细信息: http : //www.entityframeworktutorial.net/code-first/foreignkey-dataannotations-attribute-in-code-first.aspx

谢谢raghu

如何为EF定义哪个BundeLink集合属于哪个产品?

您有两种解决方案:

  • OnModelCreating你的方法DbConext用流利的配置,以便通过定义关系有助于EF知道哪些集合属于哪个。
  • InverseProperty属性装饰您的收藏集。 因此,在你的收藏,你将有InversProperty("Master")MasterOf收集和InversProperty("Bundle")BundleOf

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM