2013-02-27 1 views
2

Я новичок в LINQ и Entity Framework. Я собирал коллекции из базы данных, используя следующее:Как загружается LINQ и Entity Framework по умолчанию?

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

Таблица публикаций связана с другими таблицами через внешние ключи. Я использую это ссылаться на свойства, как это:

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 - теперь, если ваше возвращение Queryable (и это до сих пор), он собирается сделать присоединиться и вернуть один запрос SQL.

Однако, если вызов уже перечислит, он совершит второй вызов.

Blog post в MSDN для получения информации

+0

+1 за ссылку! это тоже помогает мне: p – bas

+0

Но как насчет .LinkedTable.LinkedTable? –

+0

Это то же самое, что и выше - если он не был запрошен, он будет выполнять соединение во всех трех таблицах (или любом количестве таблиц). Если он будет указан, он сделает еще один вызов для ленивой загрузки. –