2016-08-04 36 views
0

如果我有這個POCO類。 1基礎:實體框架將執行1 + 1參考相關表的n + 1查詢嗎?

class MainEntity 
{ 
    public int id {get;set;} 
    public string name {get;set;} 
    public virtual Related myRelated {get;set;} 
} 

與此相關的類

class Related 
{ 
    public int id {get;set;} 
    public string name {get;set;} 
} 

的實體1有關。

由於延遲加載,查詢db.MainEntity.ToList();會對數據庫執行N + 1查詢,或者一旦它與1:1引用相關,將只執行1個查詢?

+2

'db.MainEntity.ToList();'將執行**一個查詢**以獲取所有MainEntity行的列表 - 完全沒有'相關'的東西被檢索*當你開始引用這些'.Related'引用時,*然後* lazy-loading將根據需要逐一加載這些「相關」實體 –

回答

3

當您執行ToList時,它只會通過一個查詢檢索所有MainEntity對象的列表。如果你有任何相關的實體鏈接,他們將不會被加載。

然後,一旦您導航到myMain.Related屬性,延遲加載將觸發並將創建一個查詢以加載相關引用對象的值。

現在,如果您想要在一個查詢中直接加載參考中的所有數據,也是可以的。您可以使用.Include擴展方法來執行此操作。在你的榜樣,它會是這個樣子:

db.MainEntity.Include(m => m.Related).ToList()

您也應該檢查this page其進入細節上,你可以怎麼做懶/預先加載這意味着什麼在SQL方面。