Каковы различия между этими 3 типами загрузки? Кто-то может объяснить с примером? Различные ресурсы онлайн используют различные определения, вызывающие больше беспорядка, чем необходимый.
Ленивая загрузка и отложенная загрузка в значительной степени синонимы (AFAIK, пожалуйста, поправьте меня, если я ошибаюсь). Большая разница между нетерпеливым и ленивым. Eager будет происходить заранее, Lazy выполняется только «по мере необходимости», а выполнение будет происходить на уровне DB - давайте возьмем простой оператор 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()
Это пример активной загрузки. Мы получаем ВСЕХ людей, ВСЕ рабочие места и делаем объединение в память. Не очень умно (обычно). Вот как это выглядит Lazy-style.
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, повторения и т. д.) это лениво. Есть еще несколько причуд, но это должен быть достойный учебник.
Ленивая / отложенная загрузка : Ленивая загрузка и отложенная загрузка - это одно и то же. Отношение загружается при первом обращении к нему. Идея в том, что если данные не требуются, их не следует загружать.
Активная загрузка : Отношение извлекается вместе с родительским объектом. Это может быть более эффективным при загрузке данных, но будет загружать данные независимо от того, какие данные используются / не используются.