Entity framework 具有实体框架6的闭包表

Entity framework 具有实体框架6的闭包表,entity-framework,hierarchical,transitive-closure-table,Entity Framework,Hierarchical,Transitive Closure Table,我想使用EntityFramework6代码优先的方法实现分层数据结构(例如产品-->Product2-->Product3,产品2-->Product4)。 有几种方法可用,但我认为闭包表方法可以满足我的所有需求。有人能指导我如何在entity framework 6或任何其他替代方案中高效地实现闭包表方法吗?您需要的是与实体本身的多对多关系: 例如: public class SelfReferencingEntity { public SelfReferencingEntity()

我想使用EntityFramework6代码优先的方法实现分层数据结构(例如产品-->Product2-->Product3,产品2-->Product4)。
有几种方法可用,但我认为闭包表方法可以满足我的所有需求。有人能指导我如何在entity framework 6或任何其他替代方案中高效地实现闭包表方法吗?

您需要的是与实体本身的多对多关系: 例如:

public class SelfReferencingEntity
{
    public SelfReferencingEntity()
    {
        RelatedSelfReferencingEntitys = new HashSet<SelfReferencingEntity>();
        OtherRelatedSelfReferencingEntitys = new HashSet<SelfReferencingEntity>();
    }

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]

    public int SelfReferencingEntityId { get; set; }

    public string Name { get; set; }

    public decimal Cost { get; set; }

    public virtual ICollection<SelfReferencingEntity> RelatedSelfReferencingEntitys { get; set; }

    public virtual ICollection<SelfReferencingEntity> OtherRelatedSelfReferencingEntitys { get; set; }
}
公共类自引用性
{
公共自指性()
{
RelatedSelfReferenceGentitys=新哈希集();
OtherRelatedSelfReferenceGentitys=新哈希集();
}
[关键]
[数据库生成(DatabaseGeneratedOption.Identity)]
public int selfreferencegentityid{get;set;}
公共字符串名称{get;set;}
公共十进制成本{get;set;}
公共虚拟ICollection RelatedSelfReferenceGentitys{get;set;}
公共虚拟ICollection OtherRelatedSelfReferenceGentitys{get;set;}
}
您需要重写DbContext的OnModelCreating方法,以支持许多类似于以下内容的自引用:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<SelfReferencingEntity>()
    .HasMany(p => p.RelatedSelfReferencingEntitys)
    .WithMany(p => p.OtherRelatedSelfReferencingEntitys)
    .Map(m =>
    {
        m.MapLeftKey("SelfReferencingEntityId");
        m.MapRightKey("RelatedSelfReferencingEntityId");
        m.ToTable("RelatedSelfReferencingEntity", "");
    });
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.HasMany(p=>p.relatedSelf-ReferenceGentys)
.有许多(p=>p.OtherRelatedSelf-ReferenceGentys)
.Map(m=>
{
m、 MapLeftKey(“自参考GentityId”);
m、 MapRightKey(“RelatedSelfReferenceGentityId”);
m、 ToTable(“相关自指性”);
});
}

本书第6.3章详细介绍了一个非常好的完整示例,它解决了这个问题和可传递关系(跨多个级别的关系),其代码可以通过我提到的链接下载。

听起来好像您只需要一个带有List children属性的ProductHierarchy类。您认为哪些要求无法满足?