Entity framework 具有实体框架6的闭包表
我想使用EntityFramework6代码优先的方法实现分层数据结构(例如产品-->Product2-->Product3,产品2-->Product4)。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()
有几种方法可用,但我认为闭包表方法可以满足我的所有需求。有人能指导我如何在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类。您认为哪些要求无法满足?