EFCore.BulkExtensions – библиотека для массовых операций в EF Core
EFCore.BulkExtensions – это библиотека для Entity Framework Core, которая значительно ускоряет выполнение массовых операций с базой данных, таких как BulkInsert, BulkUpdate, BulkDelete, BulkRead и BatchUpdate/BatchDelete.
Ссылка на библиотеку: https://github.com/borisdj/EFCore.BulkExtensions
Основные преимущества:
- Высокая производительность
- Обычные методы
AddRange()
,UpdateRange()
в EF Core выполняются поштучно, что приводит к большому количеству SQL-запросов. - EFCore.BulkExtensions использует Bulk-операции, отправляя данные одним запросом, что значительно снижает нагрузку на базу и увеличивает скорость.
- Обычные методы
- Минимизация количества SQL-запросов
- В стандартном EF Core каждое добавление (
AddRange
) приводит к множествуINSERT INTO
запросов. - В BulkExtensions все данные вставляются одним SQL-запросом с BulkInsert, что значительно сокращает количество обращений к БД.
- В стандартном EF Core каждое добавление (
- Поддержка обновлений и удаления пачками
- BulkUpdate – обновляет сразу большое количество записей.
- BulkDelete – удаляет записи пачками без загрузки их в память.
- BatchUpdate / BatchDelete – обновляет/удаляет данные с фильтрацией прямо в SQL без загрузки в память.
- Поддержка транзакций
- Можно использовать
BulkConfig
для работы с транзакциями, например, задатьSetOutputIdentity = true
, чтобы получать сгенерированные ключи.
- Можно использовать
- Работа с SQLite и другими СУБД
- Поддерживаются MSSQL, PostgreSQL, MySQL, SQLite и другие базы.
Примеры использования
1. Массовая вставка (BulkInsert
)
csharpКопироватьРедактироватьusing EFCore.BulkExtensions;
var items = new List<MyEntity>
{
new MyEntity { Name = "Item1", Value = 100 },
new MyEntity { Name = "Item2", Value = 200 }
};
await context.BulkInsertAsync(items);
2. Массовое обновление (BulkUpdate
)
csharpКопироватьРедактироватьawait context.BulkUpdateAsync(items);
3. Массовое удаление (BulkDelete
)
csharpКопироватьРедактироватьawait context.BulkDeleteAsync(items);
4. Массовое чтение (BulkRead
)
csharpКопироватьРедактироватьawait context.BulkReadAsync(items);
5. Пакетное обновление (BatchUpdate
)
csharpКопироватьРедактироватьawait context.MyEntities.Where(x => x.Value > 100)
.BatchUpdateAsync(new MyEntity { Value = 500 });
6. Пакетное удаление (BatchDelete
)
csharpКопироватьРедактироватьawait context.MyEntities.Where(x => x.Value < 50)
.BatchDeleteAsync();
Когда стоит использовать?
- При обработке больших объемов данных (десятки тысяч строк и больше).
- При необходимости оптимизации производительности операций вставки/обновления/удаления.
- Когда стандартные методы EF Core слишком медленные.
Когда НЕ стоит использовать?
- Если работа идет с небольшими объемами данных (обычные методы
AddRange
,UpdateRange
достаточно быстры). - Когда требуется автоматическое отслеживание изменений (
ChangeTracker
не поддерживается в Bulk-операциях). - Если нужны триггеры, связанные сущности или каскадные операции (Bulk-операции работают напрямую с SQL и могут их игнорировать).
Вывод
EFCore.BulkExtensions
– мощный инструмент для оптимизации работы с базой данных при массовых операциях. Если ваш проект использует EF Core и приходится обрабатывать большие объемы данных, эта библиотека поможет значительно повысить производительность. 🚀
Добавить комментарий