有没有办法为EF运行的所有查询普遍添加where子句?我希望所有查询都以“entity.Active == true”运行
最简单的方法(没有实现QueryTranslator接口)就是为你的上下文创建扩展方法
public static IQyertable<YourEntity> OnlyActiveEntities(this YourDbContext context, Action<DbSet<YourEntity>> setConfigurator = null)
{
var dbSet = context.Set<YourEntity>();
setConfigurator?.Invoke(dbSet);
return context.Set<YourEntity>().AsQueriable().Where(entity => entity.Active == true);
}
某些第三方库允许过滤查询:Entity Framework Filter Library List
免责声明:我是Entity Framework Plus项目的所有者
Wiki:EF +查询过滤器
此功能正是您所需要的。您可以添加全局筛选器以筛选所有查询。
例:
// using Z.EntityFramework.Plus; // Don't forget to include this.
QueryFilterManager.Filter<ISoftDelete>(q => q.Where(x => x.IsActive));