我发现我对懒加载等概念感到困惑。
首先,这两个语句是否等价:
(1) Lazy loading:
_flaggedDates = context.FlaggedDates.Include("scheduledSchools")
.Include ("interviews").Include("partialDayAvailableBlocks")
.Include("visit").Include("events");
(2) Eager loading:
_flaggedDates = context.FlaggedDates;
换句话说,在 (1) 中,“Includes”会导致导航集合/属性与请求的特定集合一起加载,而不管您是否使用懒加载...是吗?而在 (2) 中,该语句将加载所有导航实体,即使您没有明确请求它们,因为您正在使用急切加载...是吗?
第二点:即使您使用急切加载,数据直到“枚举可枚举项”(例如以下代码)才会实际从数据库中下载:
var dates = from d in _flaggedDates
where d.dateID = 2
select d;
foreach (FlaggedDate date in dates)
{
... etc.
}
仅仅定义了查询(如 "var dates" )并不会真正地下载("枚举")数据,只有在 foreach 循环中才会执行。换句话说,查询的执行要等到 foreach 循环开始。
既然是这样(如果我的假设正确),那么急切加载和延迟加载之间的真正区别是什么呢?在任何一种情况下,数据都要等到枚举时才会出现,我有什么遗漏吗?
(顺便说一句,我的具体经验是使用代码优先、POCO开发,尽管这些问题可能更通用。)