【发布时间】:2016-10-11 05:19:59
【问题描述】:
我一直在看一门课程,作者提到如果你有一些IQueryable,请说:
var someQuery = dbContext.Table.Where(x => x.Name == "Mark");
然后尝试使用foreach 迭代someQuery 的结果,它会保持数据库连接打开直到整个foreach 结束,并且许多初学者开发人员都会犯这个错误并在foreach。相反,她建议先调用ToList(),然后在内存集合上调用foreach。
我找不到任何关于此的参考,实体框架保持数据库打开,直到foreach 循环停止。我如何评估这是否是真正的性能方面?
【问题讨论】:
-
是的,它会保持连接打开,直到遇到 .toList()
-
连接保持打开状态,直到
IQueryable的枚举完成。这将发生在foreach循环结束或调用.ToList()时。但是,尚不清楚以一种或另一种方式执行此操作会导致性能损失。长时间保持数据库连接打开肯定存在问题 - 您通常希望尽快释放连接。
标签: c# entity-framework linq linq-to-sql iqueryable