我发现我很困惑延迟加载等EF:延迟加载,渴望装载和“枚举枚举”
首先,是这两个语句等效:
(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 dates”行定义了查询,但查询不会在foreach循环之前执行。由于(如果我的假设是正确的),急切加载和延迟加载之间的真正区别是什么?????????????????????????????????????????????看来无论哪种情况,直到枚举才会显示数据。我错过了什么吗?
(我的具体的经验是代码优先,POCO发展,顺便......虽然这些问题可以应用更普遍。)
EntityFramework使用预先加载/延迟加载(加载数据的通用软件术语)来提取相关对象和集合。被缓存的查询执行是LINQ的一个工件,它允许查询更加灵活(在某些情况下,它们可能不会被执行)。 – jwize 2014-11-18 07:26:18