【发布时间】:2019-08-17 12:08:27
【问题描述】:
我尝试搜索,但在 docs.microsoft 上找不到确切答案:https://docs.microsoft.com/en-us/ef/core/querying/related-data#eager-loading
我有这段代码:
await MyDbContext.Users.Where(u => u.Id == Id).Include(u => u.UserContacts).ThenInclude(uC => uC.Contact);
返回类型是 User 类型,Contact 也是 User 类型。
当我调试并单步执行时,似乎所有必需的User 的Contacts 以及它们的所有Contacts 以及它们的所有Contacts 都已加载,等等.
问题:
- 这是 EF 的预期行为吗?如果是的话,这不会影响性能吗?必须将 DB 查找到如此深度?
- 有没有办法让我指定一种“最大深度”?
与我在这里问的最接近的匹配可能是这个 SO 线程: How does Entity Framework work with recursive hierarchies? Include() seems not to work with it
【问题讨论】:
-
我找到了这个帖子:stackoverflow.com/questions/53174003/…。答案表明它只是让我“瞥见”相关子代的调试器。不确定这是否就是全部,或者返回的对象是否实际上包含这些深度引用?还是一头雾水。
-
您可以检查结果查询是什么(它出现在输出窗口中)。这将只是用户表与自身的连接。您确定在之前的查询中没有在相同的上下文中加载用户吗?如果它们已经加载,那么即使您没有要求加载它们,您也会看到它们。
-
@JerMah 谢谢你。是的,我自己得到了用户表的连接。鉴于包含和关系,我希望如此。但是连接不是无限深度吗?也没有,因为我正在调试第一个查询,所以之前肯定没有加载其他用户。
标签: entity-framework eager-loading