top of page

Пакетные операции в 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


Околокомпьютерный блог Алика

  • alt.text.label.Facebook

© Околокомпьютерный блог Алика , 2022. Сайт создан на Wix.com

bottom of page