对于需要软删除的数据库,我们有一个IsActive
位列。为 false 时,表示该记录已被标记为已删除。
在 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(...);
如果可能的话,我更喜欢扩展方法路线。