这三种类型的加载有什么区别?可以通过例子来解释吗?网上不同的资源使用不同的定义,造成了比必要更多的混乱。
延迟加载(Lazy loading)和推迟加载(Deferred)在IT技术中基本上是同义词(据我所知,请纠正我如果我错了)。两者的主要区别在于急切加载(Eager)和惰性加载(Lazy)。急切加载会在前台立即执行,而惰性加载则只会在需要时才执行,并且执行会在数据库层面上进行。让我们以一个简单的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()
惰性/延迟加载: 惰性加载和延迟加载是同一件事。当首次访问关系时,它才会被加载。这个想法是如果数据不是必需的,就不应该被加载。
急切加载: 关系与父对象一起获取。 这样可以更有效地加载数据,但会加载数据,无论数据是否被使用或未使用。
当查询返回对象时,相关的对象不会同时被加载。
相反,当访问导航属性时,它们会自动加载。也被称为“延迟加载”。