2016-02-26 79 views
4

我試圖從數據庫中使用實體框架獲取表。實體框架 - 包含多個級別屬性

該表格引用了其他表格,該表格再次引用了其他表格。 我知道如何包含其他表格。而根據this的答案,這MSDN page包括多個層面是這樣的:

entity.TableLevel1.Include(tLvl1=>tLvl1.TableLevel2.Select(tLvl2=>tLvl2.TableLevel3)); 

但我的問題是,如何將其納入另一個表第3級?

這似乎不工作:

entity.TableLevel1.Include(tLvl1=>tLvl1.TableLevel2.Select(tLvl2=>tLvl2.TableLevel3).Select(tLvl2 => tLvl2.AnotherTableLevel3); 
+0

請向我們展示表班級代碼。 –

回答

9

添加另一個Include電話:

entity.TableLevel1.Include(tLvl1=>tLvl1.TableLevel2.Select(tLvl2=>tLvl2.TableLevel3)) 
        .Include(tLvl1=>tLvl1.TableLevel2.Select(tLvl2=>tLvl2.AnotherTableLevel3)); 

如果你想加載相關實體處於同一水平,你應該呼籲每個Include擴展方法其中。

4

可以進行多次Include()電話:

entity.TableLevel1.Include(t1 => t1.TableLevel2); 
entity.TableLevel1.Include(t1 => t1.TableLevel2.Select(t2 => t2.TableLevel3)); 
entity.TableLevel1.Include(t1 => t1.TableLevel2.Select(t2 => t2.AnotherTableLevel3)); 

entity.TableLevel1.Include("TableLevel2"); 
entity.TableLevel1.Include("TableLevel2.TableLevel3"); 
entity.TableLevel1.Include("TableLevel2.AnotherTableLevel3"); 

但是你可以爲virtual標記您的導航性能,將延遲加載,所以你不需要做出Include()電話:

class TableLevel1 
{ 
    public virtual TableLevel2 TableLevel2 { get; set; } 
} 

class TableLevel2 
{ 
    public virtual TableLevel3 TableLevel3 { get; set; } 

    public virtual TableLevel3 AnotherTableLevel3 { get; set; } 
} 
+3

Arturo,有兩件事我想告訴你關於你的解決方案。第一件事是你的第一個'Include'調用是不必要的,該級別將被加載其他任何兩個'Include'調用。第二件事是,如果他們想在其上下文已經處理的地方使用它們的實體,懶惰加載不是一個選項,將拋出異常。 – octavioccl