这3种装载有什么区别?有人能解释一个例子吗?不同的在线资源使用不同的定义,导致更多的混淆。
答案 0 :(得分:9)
延迟加载和延迟是相当的同义词(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()
这是急切加载的一个例子。我们得到所有人,所有工作,我们正在加入记忆。不是很聪明(通常)。这就是懒惰风格。
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是懒惰的),并且连接发生在数据库中。这节省了网络活动,并且通常实际上更快,因为DB已经过优化以进行连接等。
除非我们明确说“我需要那些数据!” (通过ToListing,迭代它等)它是懒惰的。还有一些更多的怪癖,但这应该是一个不错的入门。
答案 1 :(得分:3)
延迟/延迟加载:延迟加载和延迟加载是一回事。第一次访问时会加载该关系。我们的想法是,如果不需要数据,则不应加载。
急切加载:与Parent对象一起提取关系。这在加载数据时可以更有效,但无论使用/未使用的数据如何,都将加载数据。
答案 2 :(得分:0)
当查询返回对象时,不会同时加载相关对象。
而是在访问导航属性时自动加载它们。也称为“延迟加载”,