Entity Framework может работать очень медленно при массовых вставках/обновлении/удалении. Даже часто предлагаемые настройки для отключения AutoDetectChanges и/или ValidateOnSaveEnabled не всегда помогают.Есть ли непривлекательная альтернатива Z.EntityFramework.Extensions?
Я столкнулся с Z.EntityFramework.Extensions на NuGet, но, похоже, это коммерческий продукт, который будет работать только в течение определенного периода времени.
https://www.nuget.org/packages/Z.EntityFramework.Extensions/
До сих пор, мне нужно на самом деле только BulkInsert(), BulkUpdate() и BulkDelete().
Мой вопрос:
Есть ли надежная некоммерческая библиотека, которая делает почти то же самое, как Z.EntityFramework.Extensions?
Спасибо за любые подсказки!
Для периодического обновления и удаления вы можете использовать https: // GitHub .com/loresoft/EntityFramework.Extended. Для пакетной вставки - просто создайте новый контекст каждые 100 или около того. Поэтому создайте контекст, вставьте 100, сохраните изменения. Затем создайте новый, вставьте следующие 100, сохраните изменения и т. Д. Оберните все это в области транзакций. Это не пакетная вставка, но будет намного быстрее, чем вставка всех объектов в один и тот же контекстный экземпляр. – Evk
ORM вообще * НЕ * подходит для пакетных операций, а тем более массовых вставок. Это похоже на использование пинцета для транспортировки грузовика из гальки. Вы не можете скрыть это расширение. Лучшим вариантом для объемных вставок является использование SqlBulkCopy для выполнения операции * real *, минимально регистрируемой, потоковой массовой вставки. Если вы хотите выполнять массовые обновления, просто используйте оператор appopriate UPDATE.Если вы хотите * UPSERT * из внешних источников, импортируйте все в промежуточную таблицу и используйте MERGE для обновления целевой таблицы. –
Другими словами, вы ищете что-то, что может превратить ненадежный, небезопасный, не масштабируемый процесс в надежный один. Почему бы не использовать надежный, масштабируемый процесс с самого начала? –