Linq to Entities - 无限的实体循环

时间:2011-07-11 10:39:18

标签: c# database linq linq-to-entities

目前我正在为我的一个网站开发一个非常大的数据库模型。我正在使用Linq-to-entities与数据库进行通信。现在每当我从上下文中获取一个对象时,我都会看到这个问题:

  • 实体“BookReader”列出了他所阅读的所有书籍。但实体“Book”也列出了所有读过这本书的书籍读者。现在这意味着每当我的datacontext在调试模式下返回一个书籍阅读器实体并且我在他阅读的书籍列表中查看时,我也会看到那里的所有读者和他们阅读的书籍。等等。

它看起来像一个无限循环,将我的整个数据库加载到内存中。我是否犯了这样的错误,或者这确实给出了性能问题?

2 个答案:

答案 0 :(得分:2)

我不这么认为。在您或您的代码指示它执行此操作之前,EF从不加载相关实体。你提到你在调试器中看到了。这意味着您通过打开父实体触发了相关实体的延迟加载 - 相关集合为空,直到您第一次尝试访问它并在调试器中将实体作为访问权限进行浏览。您可以在SQL事件探查器中进行检查。

答案 1 :(得分:0)

Linq-to-anything永远不会解决他们的查询,直到他们必须。

如果查看调试器中的变量,您将在任何子集合上看到“单击以展开”。只有当你点击它们时才会真正运行数据库查询。

将数据库加载到调试器的唯一方法是,如果您坐在那里找到每个集合并在监视窗口中手动展开它们。