C# Portal | Программирование: post #2340 — TG.ME

В EF Core 10 есть 7 перехватчиков, но в большинстве проектов подключают ровно один.

Перехватчик — это просто точка, в которой EF Core вызывает ваш код в определённый момент. Например, при сохранении данных, выполнении запроса или открытии соединения.

Вот для чего на самом деле нужен каждый из них.

1. ISaveChangesInterceptor

Самый известный. Срабатывает вокруг SaveChanges. Именно здесь обычно реализуют поля аудита вроде CreatedOn и UpdatedOn, мягкое удаление и шаблон Outbox.

2. IDbCommandInterceptor

Видит настоящий SQL-запрос до его выполнения. Можно журналировать медленные запросы, добавлять подсказки для СУБД или изменять команду перед отправкой в базу данных.

3. IDbConnectionInterceptor

Срабатывает, когда EF открывает соединение. Можно подменять строку подключения для разных арендаторов или получать новый токен доступа к базе данных. Для многопользовательских приложений с изоляцией арендаторов этот перехватчик сильно недооценён.

4. IDbTransactionInterceptor

Перехватывает подтверждение и откат транзакции. Полезен, когда нужно добавить собственное журналирование или дополнительную логику вокруг самой транзакции.

5. IMaterializationInterceptor

Срабатывает, когда EF превращает строку из базы данных в объект сущности. Можно задать свойство, которое не связано со столбцом таблицы, или передать сущности какой-либо сервис прямо во время её создания.

6. IQueryExpressionInterceptor

Переписывает запрос ещё до того, как EF преобразует его в SQL. Например, можно автоматически добавлять сортировку по умолчанию или фильтр ко всем выполняемым запросам.

7. IIdentityResolutionInterceptor

Определяет, что делать, если две отслеживаемые сущности имеют один и тот же первичный ключ. Вместо того чтобы EF выбросил исключение, можно самостоятельно объединить эти экземпляры.

Последние три появились довольно незаметно в нескольких недавних версиях EF Core, и большинство разработчиков дальше учебных примеров с ними так и не заходят.

Если вы когда-либо подключали только первый, то в уже используемой вами версии EF Core есть ещё шесть перехватчиков, которые просто остаются без дела.

👉 @KodBlog
❤6
August 25, 2026 462 24