C# 我可以使用';包括';加载查询元素的步骤
我有一个c#类C# 我可以使用';包括';加载查询元素的步骤,c#,entity-framework,linq,C#,Entity Framework,Linq,我有一个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; }
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用于确保急切地加载关联的链接实体类型(而不是默认的延迟加载)。这避免了加载每个引用实例的大量请求(例如,在遍历集合时)
但这里不返回任何实体类型。因此,急于或懒散地加载是无关紧要的。谢谢。这正是我所想的,但一位同事向我保证,他见过在省略“include”时执行多个sql查询的实例。他说,我们应该总是明确使用“include”,以防万一,所以我想在这里问一下。也许他看到了一个更复杂的查询或ef?@jonaglon的旧版本,许多查询的情况是,您在一组结果上迭代,查看一个延迟加载的属性,并在循环中每次看到一个额外的查询(从而得到1+n个查询)。