Выполняет ли linq to sql автоматическую ленивую загрузку связанных сущностей?

Выполняет ли linq to sql автоматическую ленивую загрузку связанных сущностей?

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


person RichC    schedule 17.02.2009    source источник


Ответы (3)


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

person James    schedule 17.02.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 автоматически выполнит соединение и загрузит информацию из обеих записей в один запрос к базе данных.

person James Curran    schedule 17.02.2009

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

person Kevin Babcock    schedule 17.02.2009