linq to sql会自动延迟加载关联实体吗?

时间:2009-02-17 17:22:41

标签: linq-to-sql lazy-loading

linq to sql会自动延迟加载关联实体吗?

我认为会这样,但我找不到一篇文章陈述它。

3 个答案:

答案 0 :(得分:12)

这取决于你如何定义“懒惰”。

如果你说

var person = (from p in db.People 
              where p.PersonId = pid 
              select p).First();
var spouse = person.Spouse;   // based on the SpouseId FK 
                              // back into the People table.

然后,这将是“懒惰加载”,因为第二个对象在被引用之前不会从数据库中提取。但是,这将需要两个数据库查询。

但是,如果你要说,

var family = (from p in db.People
              where p.PersonId = pid 
             select new 
              { 
                 Name = p.Name, 
                 SpouseName = p.Spouse.Name
              }).First();

然后Linq将自动执行连接并从单个数据库查询中的两个记录中加载信息。

答案 1 :(得分:3)

是的,我相信它确实如此。它还具有“加载”功能/语义,允许您以鸟枪方式批量加载多个内容。当您知道您需要相关数据以及主要实体时,这非常有用,比如预先缓存渲染单个网页等所需的所有数据。

答案 2 :(得分:3)

是的,默认情况下启用延迟加载。查看this article