7
我想實現分層數據結構(例如產品 - >產品2 ---->產品3,產品2 ---->產品4)使用實體框架6代碼的第一種方法。 有幾種方法可用,但我認爲閉合表方法可以滿足我所有的要求。有人能指導我如何有效地在實體框架6中實現閉合表方法或任何其他方法嗎?帶實體框架的閉包表6
我想實現分層數據結構(例如產品 - >產品2 ---->產品3,產品2 ---->產品4)使用實體框架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; }
}
,你需要重寫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章節充分說明一個很好的完整的例子,其解決了這個問題,傳遞關係(關係跨越多個層次),其代碼可通過我提到的鏈接下載。
聽起來像你,只需要一個帶有List children屬性的ProductHierarchy類。你覺得什麼要求沒有滿足? –