我知道用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"
)
有谁可以解释为什么它会像这样?
答案 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的代码。