System.Data.EntityProxies группа продолжает делать тонны выбирает GroupBy linq - PullRequest
0 голосов
/ 12 декабря 2018

Я унаследовал этот проект, где он использует динамические прокси для EF6.Из репо он возвращает IqueryAble (proxyObject).Я могу посмотреть профилировщик SQL и увидеть, что он возвращает более 6000 записей ... отлично!Все идет нормально.На этом этапе я затем создаю 3 списка против этого набора данных (скажем, 3 записи по 2000). Поскольку каждый из них имеет логику фильтра, я также могу увидеть вызов БД для возврата списка.Большой!Пока 4 обращения к БД и 6000 записей.

ПРОБЛЕМА Каждый раз, когда я запускаю эту группу ... я получаю 2000 вызовов в БД!Один звонок для каждой записи в подсписке.Я думаю, это потому, что нужно каждый раз надувать объектЭто ужасно медленно, однако.

var lts = Sublist.GroupBy(p => p.proxyObject.ProvinceCode)
            .Select(n => new CountModel()
            {
                TypeName = n.Key,
                ItemCount = n.Count()
            }).ToList();

        PresentationModel.AddRange(lts);

1 Ответ

0 голосов
/ 13 декабря 2018

Я решил эту проблему, выбрав новый 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 в моем базовом возврате.Наиболее вероятные способы сделать это лучше.

...