我有一个棘手的问题。我已经看到查询中的记录数可以更改而无需重新运行相同的查询。 下面的代码显示了该场景:
using (var db = new MyContext()) {
var query = from e in db.Entities select e;
//here the query.Count is equals to 100 for example
Thread.Sleep(10000);
//after some times the db has been populated
//here the query.Count is equals to 200 for example without run again the query
}
我的问题是:为什么会这样?为什么它似乎是查询结果和数据层之间的自动绑定?实体框架在后台工作以更新查询结果? 提前谢谢。
答案 0 :(得分:2)
请记住,对于IQueryable,感谢deferred execution,每次枚举时,都会对数据库评估并执行查询,也就是说,当您运行.Count()
时,{{1}等等。
如果有疑问,请使用分析器(例如MiniProfiler或EF Profiler)来准确了解您何时访问数据库。