SQL事件探查器在读取IEnumerable列表之前显示查询

时间:2015-10-08 03:45:09

标签: entity-framework ef-code-first ienumerable

我知道用IEnumerable执行查询是推迟的,直到IEnumerable中的一个项被读取。

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

def content(request):
     response_data = {}
     if request.method == "GET":
        response_data['status'] = 'Update succeeded'

     """making response body"""

     return HttpResponse(
             json.dumps(response_data),
             content_type="application/json"
         )  

有谁可以解释为什么它会像这样?

3 个答案:

答案 0 :(得分:3)

DbSet投射到IEnumerable不会执行查询。因此, dbContext.Items 方法被覆盖以执行查询,并且不是简单的属性,如:

public virtual DbSet<Item> Items { get; set; }

或者,演示的代码不是您遇到问题的真实代码,而是在 Release 配置中运行应用程序,从而实现优化。如果永远不使用a变量,它将被优化掉,你将实际打破下一个语句。这反过来可以执行查询(例如,如果它是foreach语句)。

在这种情况下,请切换到 Debug 配置,并确保&#34;优化代码&#34;在项目属性的构建选项卡上取消选中。

答案 1 :(得分:1)

搜索

sb.insert(0,(str + "abc"));

这可能是原因。

答案 2 :(得分:1)

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

调试器在Local或Watch中调试IEnumerable,这会导致查询被触发。在大多数情况下,调试窗口会要求您显式显示可枚举但似乎在某处您正在阅读IEnumerable。

检查您是否有其他可能正在使用ToList的代码。