2016-08-04 39 views
0

如果我有这个POCO类。 1基础:实体框架将执行1 + 1参考相关表的n + 1查询吗?

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有关。

由于延迟加载,查询db.MainEntity.ToList();会对数据库执行N + 1查询,或者一旦它与1:1引用相关,将只执行1个查询?

+2

'db.MainEntity.ToList();'将执行**一个查询**以获取所有MainEntity行的列表 - 完全没有'相关'的东西被检索*当你开始引用这些'.Related'引用时,*然后* lazy-loading将根据需要逐一加载这些“相关”实体 –

回答

3

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

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

现在,如果您想要在一个查询中直接加载参考中的所有数据,也是可以的。您可以使用.Include扩展方法来执行此操作。在你的榜样,它会是这个样子:

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

您也应该检查this page其进入细节上,你可以怎么做懒/预先加载这意味着什么在SQL方面。