Я нахожу, что меня смущает ленивая загрузка и т.д.
Во-первых, эквивалентны эти два утверждения:
(1) Lazy loading:
_flaggedDates = context.FlaggedDates.Include("scheduledSchools")
.Include ("interviews").Include("partialDayAvailableBlocks")
.Include("visit").Include("events");
(2) Eager loading:
_flaggedDates = context.FlaggedDates;
Другими словами, в (1) "Включает" вызывает загрузку навигационных коллекций/свойств вместе с запрошенной конкретной коллекцией, независимо от того, что вы используете ленивую загрузку... правильно?
И в (2) инструкция будет загружать все навигационные объекты, даже если вы их специально не запрашиваете, потому что вы используете загружаемую загрузку... правильно?
Во-вторых: даже если вы используете загружаемую загрузку, данные фактически не будут загружаться из базы данных, пока вы не перечислите перечислимое значение, как в следующем коде:
var dates = from d in _flaggedDates
where d.dateID = 2
select d;
foreach (FlaggedDate date in dates)
{
... etc.
}
Данные фактически не будут загружены ( "перечислены" ) до тех пор, пока цикл foreach... не так ли? Другими словами, строка "var date" определяет запрос, но запрос не выполняется до цикла foreach.
Учитывая, что (если мои предположения верны), какова реальная разница между нетерпеливой загрузкой и ленивой загрузкой? Кажется, что в любом случае данные не появляются до перечисления. Я что-то пропустил?
(Мой конкретный опыт связан с кодовой разработкой POCO, кстати... хотя вопросы могут применяться в более общем плане.)