我有一个c#类Person
和Note
,它们映射到Sql Server表并与实体框架一起使用。在Person
数据模型中,Note
是延迟加载的:
public class Person {
public int PersonId { get; set; }
public int PersonType { get; set; }
public int? NoteId { get; set; }
public virtual Note Note { get; set; }
}
当我使用 linq 查询时,在查询开始时显式使用 Include 有什么好处吗?这也是这样的:
personCount = myContext.Person.Include(p => p.Note).Count(
m => m.PersonType == 3 &&
(m.Note.Expires == null || m.Note.Expires > DateTime.Now))
比这更有效:
personCount = myContext.Person.Count(
m => m.PersonType == 3 &&
(m.Note.Expires == null || m.Note.Expires > DateTime.Now))
在这种情况下,使用 Include
没有任何好处。
Include 用于确保预先加载关联的链接实体类型(而不是默认的延迟加载(。这避免了加载每个引用实例的大量请求(例如,在循环访问集合时(。
但您在此处不返回任何实体类型。因此,急切或懒惰的加载是无关紧要的。