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

问题描述 投票:1回答:2

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

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

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

.net entity-framework linq
2个回答
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


1
投票

一个简单的解决方案是将过滤后的IQueryable属性添加到DbContext中,例如:

public DbSet<User> Users { get; set; }

public IQueryable<User> FilteredUsers 
{
    get
    {
        return Users.Where(u => !u.IsSystemUser);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.