Для нашей базы данных, которая требует мягких удалений, у нас есть столбец бит IsActive
. Если false, это означает, что запись была отмечена как удаленная.Игнорирование выражения посетителя или IDbCommandTreeInterceptor
В течение 99% времени запросы должны включать только записи, у которых IsActive
установлено значение true. В Entity Framework 6 мы используем настраиваемый DefaultExpressionVisitor
(через IDbCommandTreeInterceptor
), чтобы автоматически выполнить эту проверку, когда столбец существует в таблице.
Однако в очень редких случаях это поведение необходимо переопределить. Есть ли способ написать метод расширения для IQueryable или параметр в DbContext, который может проверять перехватчик выражения или идентификатор дерева команд?
Я надеюсь сделать что-то вроде
var query = queryable.IncludeInactive().Where(...);
или
_dbContext.IncludeInactive = true;
var query = queryable.Where(...);
_dbContext.IncludeInactive = false;
влиять на поведение, описанное выше, что в противном случае имело бы место при выполнении этого:
var query = queryable.Where(...);
I Would предпочитайте маршрут метода расширения, если это возможно.