Набор данных большой сущности Entity, исключение из памяти

Я работаю с очень большим набором данных, примерно 2 миллиона записей. У меня есть код ниже, но получаю исключение из памяти после того, как он имеет процесс около трех партий, около 600 000 записей. Я понимаю, что, поскольку он проходит через каждую пакетную сущность фрейма, ленивые нагрузки, которые затем пытаются собрать полные 2 миллиона записей в память. Есть ли способ выгрузить пакет, который я обработал?

ModelContext dbContext = new ModelContext(); IEnumerable<IEnumerable> towns = dbContext.Towns.OrderBy(t => t.TownID).Batch(200000); foreach (var batch in towns) { SearchClient.Instance.IndexMany(batch, SearchClient.Instance.Settings.DefaultIndex, "Town", new SimpleBulkParameters() { Refresh = false }); } 

Примечание. Пакетный метод исходит из этого проекта: https://code.google.com/p/morelinq/

Клиентом поиска является следующее: https://github.com/Mpdreamz/NEST

Проблема заключается в том, что когда вы получаете данные из EF, на самом деле есть две копии созданных данных, одна из которых возвращается пользователю, а вторая, которую EF держит и использует для обнаружения изменений (чтобы он мог сохранять изменения в базе данных) , EF содержит этот второй набор для времени жизни контекста, и этот набор, который запускает вас из памяти.

У вас есть 2 варианта решения этой проблемы.

  1. обновить свой контекст каждой партии
  2. Используйте .AsNoTracking () в вашем запросе, например:

     IEnumerable> towns = dbContext.Towns.AsNoTracking().OrderBy(t => t.TownID).Batch(200000); 

это говорит EF не сохранять копию для обнаружения изменений. Вы можете прочитать немного больше о том, что делает AsNoTracking, и о влиянии этого воздействия на мой блог: http://blog.staticvoid.co.nz/2012/4/2/entity_framework_and_asnotracking

  • Лучший способ запросить страницу данных и получить общее количество в инфраструктуре сущностей 4.1?
  • LEFT JOIN в LINQ для объектов?
  • Объект с тем же ключом уже существует в ObjectStateManager. ObjectStateManager не может отслеживать несколько объектов с одним и тем же ключом
  • EF Core Второй уровень ThenInclude missworks
  • неожиданный результат GetType () для записи объекта
  • Как «разогревать» Entity Framework? Когда он становится «холодным»?
  • Как создать пользовательские дополнительные поля в UserProfile в MVC4
  • Сохранение данных многих из многих отношений в MVC Создание представления
  • Использование простого инжектора с шаблоном работы и репозитория в форме Windows
  • Почему включение не имеет никакого эффекта?
  • Невозможно создать постоянное значение типа В этом контексте поддерживаются только примитивные типы или типы перечислений
  • Давайте будем гением компьютера.