Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
Entity framework SQL探查器在读取IEnumerable列表之前显示查询_Entity Framework_Ef Code First_Ienumerable - Fatal编程技术网

Entity framework SQL探查器在读取IEnumerable列表之前显示查询

Entity framework SQL探查器在读取IEnumerable列表之前显示查询,entity-framework,ef-code-first,ienumerable,Entity Framework,Ef Code First,Ienumerable,我知道IEnumerable查询的执行会推迟到IEnumerable中的某个项被读取之后 当我在第二行暂停以下代码时,我可以看到查询是通过SQL Profiler在数据库中执行的。我认为当执行第三行时,应该在数据库中执行查询: 1 IEnumerable<Item> items = dbContext.Items; 2 var a = 0; 3 gridview.DataSource= items.ToList(); 4 gridview.DataBind(); 1 IEnumer

我知道IEnumerable查询的执行会推迟到IEnumerable中的某个项被读取之后

当我在第二行暂停以下代码时,我可以看到查询是通过SQL Profiler在数据库中执行的。我认为当执行第三行时,应该在数据库中执行查询:

1 IEnumerable<Item> items = dbContext.Items;
2 var a = 0;
3 gridview.DataSource= items.ToList();
4 gridview.DataBind();
1 IEnumerable items=dbContext.items;
2 var a=0;
3 gridview.DataSource=items.ToList();
4 gridview.DataBind();

有人能解释它为什么会这样吗?

DbSet
强制转换为
IEnumerable
不会执行查询。因此,dbContext.Items方法被重写以执行查询,而不是一个简单的属性,如:

public virtual DbSet<Item> Items { get; set; }
公共虚拟数据库集项{get;set;}
或者,演示的代码不是您遇到问题的真实代码,并且您正在版本配置中运行应用程序,以实现优化。如果
a
变量从未被使用过,它将被优化掉,您将在下一条语句中实际中断。这反过来又可以执行查询(例如,如果它是foreach语句)

在这种情况下,切换到调试配置,并确保在项目属性的“生成”选项卡上取消选中“优化代码”。

搜索

dbContext.Configuration.LazyLoadingEnabled = false; 

这可能是原因。

正如Roman所提到的,分配给IEnumerable不会触发查询

是您的调试器在本地或监视的调试窗口中计算IEnumerable,从而触发查询。在大多数情况下,“调试”窗口要求您显式显示可枚举项,但似乎您正在读取IEnumerable


检查是否有任何其他可能使用ToList的代码。

能否尝试解释导致问题的原因!