对于我们需要软删除的数据库,我们有一个IsActive
位列。如果为false,则表示记录已被标记为已删除。忽略表达式访问者或IDbCommandTreeInterceptor
对于99%的时间,查询应该只包含IsActive
设置为true的记录。在实体框架6中,我们使用自定义的DefaultExpressionVisitor
(通过IDbCommandTreeInterceptor
)在列存在于表上时自动进行此检查。
但是,在极少数情况下,这种行为需要被覆盖。有没有办法为IQueryable编写扩展方法,或者在DbContext上设置表达式访问者或命令树拦截器可以检查的设置?
我希望能像做
var query = queryable.IncludeInactive().Where(...);
或
_dbContext.IncludeInactive = true;
var query = queryable.Where(...);
_dbContext.IncludeInactive = false;
影响上面所描述的行为,否则将会发生这样的时候:
var query = queryable.Where(...);
我会如果可能,更喜欢扩展方法路由。