Entity Framework работа с тяжелыми таблицами

118
16 мая 2019, 13:50

У меня есть таблица городов около 2.5 миллионов записей (весит 2гб) и если в SQL запрос выполняется моментально по поиску, то Entity Framework начинает сначала всю таблицу выгружать в память и все подвисает на достаточно долгое время, не подскажите как работать с такими тяжелыми таблицами.

        var country = _repo.Get<Country>(x => x.CountryId == 1);
        var cities = country.Cities.Where(x => 
        x.TitleRu.Trim().ToLower().StartsWith("ново")).ToList();

Я проверил запрос в LINQPad 5 там аналогичный запрос выполняется тоже моментально

Answer 1

Ок, проблема в том, что ваш Cities - это List<City>. List - не IQueryable. Любая работа со списком вытянет в память весь список, и потом уже отфильтрует его.

Если хотите работать с Cities через EF, с отображением запроса в базу - или выбирайте из контекста изначально Cities, с фильтром по City.CountryID

var cities = _repo.Get<City>(x => x.City.Country.CountryId == 1 && 
                                  x.TitleRu.Trim().ToLower().StartsWith("ново"))
).ToList();

или работайте через context.Entry(...).Collection(...)

READ ALSO
Получить ответ от сайта c помощью Cefsharp

Получить ответ от сайта c помощью Cefsharp

Добавил стандартное окно браузера от Cefsharp, пытаюсь авторизоваться на сайте и получить ответ при помощи IRequestHandler, но в итоге из за OnBeforeResourceLoad...

138
C# WPF Как создать свой User Control со списком внутри?

C# WPF Как создать свой User Control со списком внутри?

Хочу сделать TreeView но в таком виде и с нуля

157
Экранирование и регулярные выражения. PHP

Экранирование и регулярные выражения. PHP

Задание: Если переменная $text не содержит специальных символов - вывести соответствующее сообщениеНикак не получается заставить программу...

130