链接到实体-无尽的实体循环

本文关键字:实体 循环 无尽 链接 | 更新日期: 2023-09-27 18:01:56

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

  • 实体"BookReader"得到了他读过的所有书的列表。但是实体"Book"也得到了所有读过这本书的读者的列表。这就意味着,每当我的数据上下文在调试模式下返回一个bookreader实体时,如果我查看他读过的书的列表,我也会看到其中的所有读者和他们读过的书。等等。

它看起来像一个无限循环,我的整个数据库将被加载到内存中。是我想错了还是这真的会带来性能问题?

链接到实体-无尽的实体循环

我不这么认为。EF永远不会加载相关的实体,除非你或你的代码指示它这样做。你提到你在调试器中看到过。这意味着您通过打开父实体触发了相关实体的延迟加载-相关集合是空的,直到您第一次尝试访问它并在调试器中浏览该实体时才算访问。

Linq-to-anything在必要时才解析它们的查询。

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

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