Ленивая загрузка, отложенная загрузка и полная загрузка в платформе Entity - PullRequest
10 голосов
/ 12 июля 2010

Каковы различия между этими 3 типами загрузки?Может кто-нибудь объяснить на примере?Разные ресурсы в сети используют разные определения, которые вызывают больше путаницы, чем необходимо.

Ответы [ 3 ]

9 голосов
/ 12 июля 2010

Lazy loading и Deferred являются довольно синонимами (AFAIK, пожалуйста, исправьте меня, если я ошибаюсь). Большая разница между Eager и Lazy. Стремление будет происходить заранее, Lazy происходит только «по мере необходимости», и выполнение будет происходить на уровне базы данных - давайте возьмем простой оператор JOIN в качестве примера

var people = (from p in people SELECT p).ToList();
var jobs = (from j in jobs SELECT j).ToList();

var peopleAndJobs = (from p in people JOIN j on j.personId equals p.personId SELECT p).ToList()

Это пример активной загрузки. Мы получаем ВСЕХ людей, ВСЕ рабочие места, и мы делаем соединение в памяти. Не очень умный (обычно). Вот как выглядит ленивый стиль.

var people = (from p in people SELECT p);
var jobs = (from j in jobs SELECT j);

var peopleAndJobs = (from p in people JOIN j on j.personId equals p.personId SELECT p).ToList()

Это создает IQueryable как для людей, так и для работы (IQueryable ленив), и объединение происходит в БД. Это экономит сетевую активность и, как правило, на самом деле быстрее, поскольку БД оптимизирована для выполнения объединений и тому подобного.

Если мы явно не скажем "Мне нужны эти данные!" (ToListing это, повторяя это, и т. д.) это лениво. Есть еще несколько причуд, но это должен быть достойный учебник.

3 голосов
/ 12 июля 2010

Ленивая / отложенная загрузка : Ленивая загрузка и отложенная загрузка - это одно и то же.Отношение загружается при первом обращении к нему.Идея состоит в том, что если данные не требуются, они не должны загружаться.

Стремительная загрузка : связь выбирается вместе с родительским объектом.Это может быть более эффективным при загрузке данных, но будет загружать данные независимо от того, какие данные используются / не используются.

0 голосов
/ 28 марта 2013

Когда объекты возвращаются запросом, связанные объекты не загружаются одновременно.

Вместо этого они загружаются автоматически при обращении к свойству навигации. Также известен как «ленивая загрузка»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...