我继承了这个项目,该项目使用的是EF6动态代理。从仓库中,它返回IqueryAble(proxyObject)。 我可以观看SQL事件探查器,并看到它返回了6000多个记录。到目前为止,一切都很好。 此时,我在该数据集的前面创建了3个列表(例如3 X 2000条记录) 因为每个都有过滤逻辑,所以我也可以看到对数据库的调用以返回列表。大!到目前为止,有4个对DB的调用和6000条记录。
问题 每次运行此组时,我都会收到2000个DB调用!子列表中的每条记录一次通话。我猜是因为每次都需要给对象充气?但是它的速度非常慢。
var lts = Sublist.GroupBy(p => p.proxyObject.ProvinceCode)
.Select(n => new CountModel()
{
TypeName = n.Key,
ItemCount = n.Count()
}).ToList();
PresentationModel.AddRange(lts);
答案 0 :(得分:1)
我最终选择了直接进入新的POCO解决了这个问题。发生的事情是,由于该实体是一堆基础存储库的组合……最终,EF只是创建了大量的单个查询,然后汇总它们
var last3Months =
ProxyEntity.Where(l => DateTime.now() <= l.EffectiveDate)
.Select(l => new ModelMicro()
{
x= l.x,
y= l.y,
z= l.z
});
这导致对数据库的一次调用返回了6000行,然后我可以将其转移到需要的地方。然后,我在基础收益中将z分组。最有可能使它变得更好的方法。