Линк к sql автоматически лениво загружает связанные объекты? - PullRequest
6 голосов
/ 17 февраля 2009

Загружает ли linq to sql автоматически связанные объекты?

Я думаю, что так и будет, но я не могу найти статью, в которой говорится, что это так.

Ответы [ 3 ]

12 голосов
/ 17 февраля 2009

Зависит от того, как вы определяете «ленивый груз».

Если вы скажете

var person = (from p in db.People 
              where p.PersonId = pid 
              select p).First();
var spouse = person.Spouse;   // based on the SpouseId FK 
                              // back into the People table.

Тогда это будет точно "отложенная загрузка", поскольку второй объект не извлекается из базы данных, пока на него не ссылаются Однако для этого потребуется два запроса к базе данных.

Однако, если бы вы сказали,

var family = (from p in db.People
              where p.PersonId = pid 
             select new 
              { 
                 Name = p.Name, 
                 SpouseName = p.Spouse.Name
              }).First();

Затем Linq автоматически выполнит объединение и загрузит информацию из обеих записей в одном запросе к базе данных.

3 голосов
/ 17 февраля 2009

Да, отложенная загрузка включена по умолчанию. Проверьте эту статью .

3 голосов
/ 17 февраля 2009

Да, я верю, что это так. Он также имеет особенность / семантику «загрузить с», которая позволяет пакетно загружать несколько вещей в режиме дробовика. Это полезно, когда вы знаете, что вам понадобятся связанные данные вместе с основным объектом сразу, например, для предварительного кэширования всех данных, которые вам понадобятся для отображения одной веб-страницы и т. Д.

...