实体框架是否会对1:1参考相关表执行n + 1个查询?

时间:2016-08-04 12:39:16

标签: c# entity-framework

如果我有这个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次查询?

1 个答案:

答案 0 :(得分:3)

当您执行ToList时,它只会通过一个查询检索所有MainEntity个对象的列表。如果您链接了任何相关实体,则根本不会加载它们。

然后,一旦导航到myMain.Related属性,延迟加载将触发,并将创建一个查询来加载该相关参考对象的值。

现在,如果您想在一个查询中直接加载引用中的所有数据,那么它也是可能的。您可以使用.Include扩展方法执行此操作。在您的示例中,它看起来像这样:

db.MainEntity.Include(m => m.Related).ToList()

您还应该检查this page,其中详细介绍了如何进行延迟/急切加载以及它在SQL方面的含义。