我想为我的User实体上触发的每个查询添加一个过滤器,以过滤IsSystemUser == false。
我看过使用IDbCommandTreeInterceptor和IDbCommandInterceptor的示例,并且还有机会在DbContext子类上覆盖方法Executing(DbCommand command, IEnumerable<DbContext> interceptionContext)
,但我不清楚如何实现这一点。
根据我的IsSystemUser属性,为用户实体过滤数据的每个查询添加过滤器的简单方法是什么?
答案 0 :(得分:1)
一个简单的解决方案是将过滤后的IQueryable属性添加到DbContext中,例如:
public DbSet<User> Users { get; set; }
public IQueryable<User> FilteredUsers
{
get
{
return Users.Where(u => !u.IsSystemUser);
}
}
答案 1 :(得分:1)
免责声明:我是该项目的所有者Entity Framework Plus
EF +查询过滤器允许您为每个查询添加过滤器。
// using Z.EntityFramework.Plus; // Don't forget to include this.
var ctx = new EntitiesContext();
ctx.Filter<IUser>(q => q.Where(x => !x.IsSystemUser ));
// SELECT * FROM Customers WHERE IsSystemUser = FALSE
var list = ctx.Customers.ToList();