如果我有这个POCO课程。
class MainEntity
{
public int id {get;set;}
public string name {get;set;}
public virtual Related myRelated {get;set;}
}
与此课程相关
class Related
{
public int id {get;set;}
public string name {get;set;}
}
实体以1:1的方式相关。
由于延迟加载,查询db.MainEntity.ToList();
是否会对数据库执行N + 1次查询,或者,一旦它与参考1:1相关,将只执行1次查询?
答案 0 :(得分:3)
当您执行ToList
时,它只会通过一个查询检索所有MainEntity
个对象的列表。如果您链接了任何相关实体,则根本不会加载它们。
然后,一旦导航到myMain.Related
属性,延迟加载将触发,并将创建一个查询来加载该相关参考对象的值。
现在,如果您想在一个查询中直接加载引用中的所有数据,那么它也是可能的。您可以使用.Include
扩展方法执行此操作。在您的示例中,它看起来像这样:
db.MainEntity.Include(m => m.Related).ToList()
您还应该检查this page,其中详细介绍了如何进行延迟/急切加载以及它在SQL方面的含义。