Выполняет ли linq to sql автоматическую ленивую загрузку связанных сущностей?
Я бы подумал, что это так, но я не могу найти статью, в которой говорится об этом.
Выполняет ли linq to sql автоматическую ленивую загрузку связанных сущностей?
Я бы подумал, что это так, но я не могу найти статью, в которой говорится об этом.
Да, я верю, что это так. Он также имеет функцию / семантику «загрузить с», которая позволяет вам пакетно загружать несколько вещей в подходе дробовика. Это полезно, когда вы знаете, что вам сразу же понадобятся связанные данные вместе с основным объектом, например, для предварительного кэширования всех данных, которые вам понадобятся для отображения одной веб-страницы и т. д.
Это зависит от того, как вы определяете «ленивую загрузку».
Если вы скажете
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 автоматически выполнит соединение и загрузит информацию из обеих записей в один запрос к базе данных.
Да, отложенная загрузка включена по умолчанию. Прочтите эту статью.