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

Posted

技术标签:

【中文标题】linq to sql 会自动延迟加载关联实体吗?【英文标题】:Does linq to sql automatically lazy load associated entities? 【发布时间】:2009-02-17 17:22:40 【问题描述】:

我认为会,但我找不到这样的文章。

【问题讨论】:

【参考方案1】:

这取决于你如何定义“延迟加载”。

如果你说

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 将自动进行连接,并在单个数据库查询中从两条记录中加载信息。

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于linq to sql 会自动延迟加载关联实体吗?的主要内容,如果未能解决你的问题,请参考以下文章

延迟的加载

用于新项目的 Linq to SQL

LINQ中的First()会导致急切或延迟加载吗?

EF5.X Code First表关联与延迟加载

WP7 Linq To SQL(SQL CE) IDataErrorInfo

LINQ to SQL 或任何其他启用了 LINQ 的 ORM 是不是支持许多关联过滤?