Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq到实体-无限实体循环_C#_Database_Linq_Linq To Entities - Fatal编程技术网

C# Linq到实体-无限实体循环

C# Linq到实体-无限实体循环,c#,database,linq,linq-to-entities,C#,Database,Linq,Linq To Entities,目前,我正在为我的一个网站开发一个非常大的数据库模型。我使用LINQtoEntities与数据库对话。现在,每当我从上下文中获取对象时,我都会看到以下问题: 实体“BookReader”得到了一份他读过的所有书的列表。但实体“Book”也有一个列表,列出了所有读过这本书的读者。这意味着每当我的datacontext在调试模式下返回bookreader实体时,我在他读过的书籍列表中查看,我也会看到其中的所有读者以及他们读过的书籍。等等 这看起来像是一个无休止的循环,我的整个数据库将被加载到内存

目前,我正在为我的一个网站开发一个非常大的数据库模型。我使用LINQtoEntities与数据库对话。现在,每当我从上下文中获取对象时,我都会看到以下问题:

  • 实体“BookReader”得到了一份他读过的所有书的列表。但实体“Book”也有一个列表,列出了所有读过这本书的读者。这意味着每当我的datacontext在调试模式下返回bookreader实体时,我在他读过的书籍列表中查看,我也会看到其中的所有读者以及他们读过的书籍。等等

这看起来像是一个无休止的循环,我的整个数据库将被加载到内存中。我是否认为这是一个错误,或者这真的会导致性能问题?

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

Linq to anything永远不会解析他们的查询,除非他们必须这样做

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


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

只要lazyloading有效,就不会有问题。谢谢andrew!这和拉迪斯拉夫说的差不多,对我帮助很大。谢谢你的回答。我以为它会像这样工作,但需要确定。我从未使用过SQL profiler,但我看到它已安装在我的计算机上,我会尝试一下。