我想实现分层数据结构(例如Product – > Product 2 —-> Product3,Product 2 —-> Product4)使用实体框架6代码的第一种方法.
有几种方法可用,但我认为闭包表方法可以满足我的所有要求.有人可以指导我如何有效地或任何其他替代方案在实体框架6中实施闭包表方法?
有几种方法可用,但我认为闭包表方法可以满足我的所有要求.有人可以指导我如何有效地或任何其他替代方案在实体框架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; } }
并且您需要覆盖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",""); }); }
在Entity Framework 6 Recipes书的第6.3章中有一个非常好的完整例子,它解决了这个问题和传递关系(跨越多个级别的关系),它的代码可以通过我提到的链接下载.