我有一个很大的查询,下载了很多项目。有没有办法检查EF何时开始下载数据,因此我可以使用进度条显示进度。正如您在下面的图表中所看到的那样,它有大约10秒的时间段,它可以获得所有行。我想如果我能提醒用户发生这种情况会很好。
答案 0 :(得分:1)
只需枚举这样的结果:
foreach (var item in yourQuery) {
// this item has arrived - update progress
}
请注意,在某些版本的EF6中,默认情况下会缓存查询(但在最新版本中,根据我所知,它们会进行流式传输),因此对于该版本,您可能需要执行此操作:
foreach (var item in yourQuery.AsStreaming()) {
}
现在,要报告正确的进度,您必须事先了解查询将返回多少项。唯一知道这一点的方法(除非你因为你的查询的形式已经知道它),首先要查询:
var total = yourQuery.Count(); // will make DB query
var results = new List<YourEntityType>();
foreach (var item in yourQuery) {
results.Add(item);
var progress = (float) results.Count / total;
ReportProgress(progress);
}