System.Data.EntityProxies组通过不断进行大量选择GroupBy Linq

时间:2018-12-12 20:39:19

标签: linq linq-to-sql entity-framework-6

我继承了这个项目,该项目使用的是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);

1 个答案:

答案 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分组。最有可能使它变得更好的方法。