Пакетные операции в Entity Framework Core
- Алик Ким
- 13 апр. 2024 г.
- 1 мин. чтения
Обновлено: 15 июл. 2024 г.

на чистом EF пакетные операции делать очень не очень. например, при массовом удалении по какому-то признаку придется загрузить в память каждую удаляемую строку таблицы.
посмотрел, какие есть билиотеки на эту тему:
EFCore.BulkExtensions - библиотека посвящена исключительно пакетным операциям. платна только для крупных компаний.
EF Plus - полностью бесплатная.
сложилось впечатление, что EFCore.BulkExtensions прям зверская в плане оптимизации. и умеет разделать пакетные операции на порции и реализовывать прочие продвинутые сценарии.
EF Plus - посвящена не только балковым операциям, там есть еще некоторые фичи: аудит, оптимизации некоторых аспектов EF, кеширование запросов.... пакетные операции умеет вполне себе делать, как минимум, базово (может, тоже есть какие-то навороты, а я просто не встретил).
для себя решил использовать EF Plus.
EFCore.BulkExtensions стану рассматривать только в каких-то экзотичееских ситуациях, с которыми EF Plus не будет справляться (и которые, скорее всего, никогда не произойдут)
еще мелкое замечание: при пакетном удалении EF Plus - DeleteFromQuery - не задействованы стандартные перехватчики команд и логгеры EF. я не смог добиться, чтоб поймать программно выполняемый запрос. увидел его только на стороне SQL Server с помощью SQL Profiler
UPD:
попробовал на практике пакетное удаление Z.EntityFramework.Plus (.Delete) - умная жопа!
казалось бы ну выполнит чтото типа
DELETE FROM [{tableName}]
WHERE <условие>
так нет! он там запилил генерацию и запуск хранимой процедуры (или как это грамотно назвать?), которая порциями по 4000 рядов удаляет!
Comments