2014-01-16 52 views
0

我有對象圖如下所示:顯式地加載實體內相關實體

Public ClassA 
{ 
    public int Id { get; set; } 
    public virtual ICollection<ClassB> ClassB_List { get; set; } 
} 

Public ClassB 
{ 
    public int Id { get; set; } 
    public virtual ICollection<ClassC> ClassC_List { get; set; } 
} 

Public ClassC 
{ 
    public int Id { get; set; } 
} 

現在我想要做的是什麼,因爲我已禁用延遲加載在的DbContext水平,對於給定的ClassA的實例,我想加載所有相關的實體(ClassBList和ClassCList)。 我可以在使用加載嵌套集合ClassB_List:

context.Entry(classA).Collection("ClassB_List").Load(); 

不過,我不知道再怎麼內ClassB_List加載每個子項的ClassC_List不訴諸垃圾的東西像這樣:

classA.ClassB_List.ToList().ForEach(c => context.Entry(c).Collection("ClassC_List").Load()); 

我知道我找到了另一種方法是使用include()使用預先加載的情況下:

var c = context.ClassA_list 
          .Include("ClassB_List.ClassC_List") 
          .ToList(); 

這是罰款ClassA的實例的名單我f我已經通過DBContext模型包含了屬性,但我並不經常想要這樣做,只是想明確加載。 任何想法?

回答

0

您已經使用了兩種方法來渴望負載:

  • 包括
  • 負載

,如果你想有一定的靈活性,你可以做這樣的事情:

var c = context.ClassA_list; 

if (IWantTheRelatedTable) 
{ 
    c = c.Include("ClassB_List.ClassC_List"); 
} 

var result = c.ToList(); 

你創建一個IQueryable,然後當它包含所有包含時,你需要執行它。

+0

是否有可能做到這一點顯式加載而不使用預加載,因爲我喜歡加載一個單一的父實體,而不是一個列表的相關實體? – Rubans