db.SaveChanges () занимает много времени для сохранения данных в БД

#database #entity-framework #insert #entity-framework-6 #savechanges

#База данных #entity-framework #вставить #entity-framework-6 #savechanges

Вопрос:

Итак, я использую db.SaveChanges () для сохранения 2500 записей в БД. Для вставки всех записей требуется> 1 минуты. Затем я увидел здесь сообщение, рекомендующее bulkinsert из ZEntityFramework, но проблема в том, что вы можете использовать пробную версию только в течение 1 месяца, и мы не можем сделать это на рабочем сервере, если вы не купите. Я знаю, что SqlBulkCopy — это опция в ADO, но я не хочу переключаться с EF. Я пробовал такие вещи, как db.Configuration.Автоопределениеchangesenabled = false; но все равно для вставки данных требуется около минуты. Есть ли в EF какая-либо опция для более быстрого сохранения данных? Очень ценю вашу помощь.

Ответ №1:

В EF Core добавлена поддержка пакетной обработки. И есть бесплатные альтернативы, чтобы заставить SqlBulkCopy работать с коллекциями EF.

Вот один, который я написал давным-давно, который нашел свое применение во множестве разных проектов. Я дал ему новый дом на GitHub

https://github.com/dbrownems/ObjectDataReader/blob/main/ObjectDataReader.cs

Это очень быстро и просто, вы просто добавляете файл .cs в свой проект, импортируете пространство имен и можете преобразовать свои коллекции объектов в DataReader или DataTable для использования с SqlBulkCopy или аналогичными.

Комментарии:

1. Спасибо, Дэвид. Изучит это.