linq to sql 会自动延迟加载关联实体吗?
我认为会,但我找不到这样的文章。
这取决于您如何定义“延迟加载”。
如果你说
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 将自动执行连接并在单个数据库查询中从两条记录中加载信息。
是的,我相信确实如此。它还具有“加载”功能/语义,允许您以霰弹枪方法批量加载多个内容。当您知道需要相关数据以及主要实体时,这很有用,例如预缓存渲染单个网页所需的所有数据等。
是的,默认情况下启用延迟加载。看看这篇文章。