有没有办法检查Entity Framework是否开始获取数据?

时间:2017-03-03 09:06:34

标签: c# entity-framework

我有一个很大的查询,下载了很多项目。有没有办法检查EF何时开始下载数据,因此我可以使用进度条显示进度。正如您在下面的图表中所看到的那样,它有大约10秒的时间段,它可以获得所有行。我想如果我能提醒用户发生这种情况会很好。

graph

1 个答案:

答案 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);
 }