2014-04-08 116 views
7

我想實現分層數據結構(例如產品 - >產品2 ---->產品3,產品2 ---->產品4)使用實體框架6代碼的第一種方法。 有幾種方法可用,但我認爲閉合表方法可以滿足我所有的要求。有人能指導我如何有效地在實體框架6中實現閉合表方法或任何其他方法嗎?帶實體框架的閉包表6

+0

聽起來像你,只需要一個帶有List children屬性的ProductHierarchy類。你覺得什麼要求沒有滿足? –

回答

2

你需要的是與實體本身一個許多一對多的關係: 例如:

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; } 
} 

,你需要重寫OnModelCreating的DbContext的方法來支持多對多的自我引用類似如下:

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章節充分說明一個很好的完整的例子,其解決了這個問題,傳遞關係(關係跨越多個層次),其代碼可通過我提到的鏈接下載。