2013-02-27 82 views
2

我是LINQ和實體框架的新手。我一直在使用以下方法從數據庫中提取集合:默認情況下LINQ和實體框架如何加載?

var Publications = from pubs in db.RecurringPublications 
        select pubs; 

Publications表通過外鍵鏈接到其他表。我一直在使用這種引用這樣的性質:

Publications.Single().LinkedTable.LinkedTableColumn 

,有時甚至進一步下跌的鏈條:

Publications.Single().LinkedTable.LinkedTable.LinkedLinkedTableColumn 

我知道你可以指定延遲加載或預先加載,我想知道它是如何的默認處理。默認情況下是否有最大深度?它是否找出了在編譯時要使用多少個連接?

回答

5

它只會急於加載該特定表中的內容。

var Publications = from pubs in db.RecurringPublications 
        select pubs; 

只會從您的RecurringPublications表中獲取數據。您可以指定是否要加載其他屬性,但如果您未指定任何內容,則只會提供您所要求的內容 - 僅此而已。

Publications.Single().LinkedTable.LinkedTableColumn 

是懶加載您LinkedTableColumn - 現在,如果你的回報是可查詢的(這是到目前爲止),它會做一個連接,並返回一個SQL查詢。

但是,如果該呼叫已被列舉,它將進行第二次呼叫。

Blog post MSDN上有關信息

+0

+1的鏈接!這也幫助我很多:p – bas 2013-02-27 19:26:00

+0

但是.LinkedTable.LinkedTable呢? – 2013-02-27 20:24:00

+0

與上面相同 - 如果未查詢,它將在所有3個表(或任意數量的表)之間進行連接。如果它已被枚舉,它將爲延遲加載做另一個調用。 – 2013-02-27 20:42:27