为EF中的某个实体的每个查询添加过滤器

时间:2017-03-30 08:58:43

标签: .net entity-framework linq

我想为我的User实体上触发的每个查询添加一个过滤器,以过滤IsSystemUser == false。

我看过使用IDbCommandTreeInterceptor和IDbCommandInterceptor的示例,并且还有机会在DbContext子类上覆盖方法Executing(DbCommand command, IEnumerable<DbContext> interceptionContext),但我不清楚如何实现这一点。

根据我的IsSystemUser属性,为用户实体过滤数据的每个查询添加过滤器的简单方法是什么?

2 个答案:

答案 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();

维基:EF+ Query Filter