实体框架代码首先是一个实体的多对多

时间:2014-02-19 13:12:59

标签: c# entity-framework ef-code-first entity-relationship

我有型号类别:

public class Category
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
    }

我想创建一个像这样的新模型DependencyCategory来存储多对多的子父关系。

public class DependencyCategory
    {
        public int Id { get; set; }
        public Category Child { get; set; }
        public Category Parent { get; set; }
    }

如何在类别模型中创建与ICollection<DependencyCategory>子女,父母的现在关系?例如,我想要访问一个类别父母来查看所有孩子,或者是否是孩子看到所有父母可用。

2 个答案:

答案 0 :(得分:0)

根据我的理解,您的课程应该像这样定义。

public class Category
{
    public int Id {get; set; }
    public string Name {get; set; }
    public string Description {get; set; }

    public List<Category> ParentCategories {get; set; }
    public List<Category> ChildCategories {get; set; }
}

public class CategoryRelationships
{
    public int ParentCategoryId {get; set; }
    public int ChildCategoryId {get; set; }
}

我没有包含所有的管道,因为Code-First不是我的强项,但它应该指向正确的方向并稍微改善您的数据库结构。请注意,CategoryRelationship类定义了您的关系,在ParentCategoryIdChildCategoryId上添加了复合主键,您不需要单独的Id列,同时还要确保相同的两个类别不能连接两次。

希望它有所帮助。

答案 1 :(得分:0)

This solved

HasRequired(a => a.ParentProduct)
                .WithMany(b => b.ChildProducts)
                .HasForeignKey(c => c.ParentId) // FK_RelatedProductParentID
                .WillCascadeOnDelete(false);
HasRequired(a => a.ChildProduct)
                .WithMany(b => b.ParentProducts)
                .HasForeignKey(c => c.ChildId); // FK_RelatedProductChildID
public class CategoryDependency
    {
        [Key, Column(Order = 0)]
        public int ParentId { get; set; } // ParentID
        [Key, Column(Order = 1)]
        public int ChildId { get; set; } // ChildID

        // Foreign keys
        public virtual Product ParentProduct { get; set; } //  FK_RelatedProductParentID
        public virtual Product ChildProduct { get; set; } //  FK_RelatedProductChildID
    }
public class Product
    {
        [Key]
        public int ProductId { get; set; } // ProductID (Primary key)
        public string ProductName { get; set; } // ProductName


        // Reverse navigation
        public virtual ICollection<RelatedProduct> ParentProducts { get; set; } // RelatedProduct.FK_RelatedProductChildID
        public virtual ICollection<RelatedProduct> ChildProducts { get; set; } // RelatedProduct.FK_RelatedProductParentID
    }