gpt4 book ai didi

c# - Entity Framework 向所有查询添加 where 子句

转载 作者:行者123 更新时间:2023-12-02 03:28:10 24 4
gpt4 key购买 nike

我有一个项目正在使用 Entity 框架和 AspNet Identity。

IdentityUser 的参数之一是停用字段。

在应用内,如果我想获得用户,我会这样做:

var users = Context.Users //etc....

但是,我不希望此查询返回任何已停用的用户。我知道我可以做到这一点

var users = Context.Users.Where(x => x.Deactivated != true);

但是,我不愿意这样做,因为我确信迟早会有人忘记添加这个 where 子句。

有没有办法让实体自动对所有上下文查询执行此操作?我发现了这个:

https://learn.microsoft.com/en-us/ef/core/querying/filters

但我没有 EF 核心,无法升级到它。

我知道我可以制作一个包装函数并调用它,但我正在努力寻找更好的解决方案...

最佳答案

我经常使用 XXXStore 成员和 XXX 成员的组合,其中 XXXStoreDBSetXXX 是使用 AsNoTracking() 的查询。然后我在响应 GET 的查询中使用 XXX 成员,仅当我想更新数据库时才使用 XXXStore。例如

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

public IQueryable<User> Users => UserStore.AsNoTracking();

这提供了不跟踪不会更新的实体的优势,但采用 DRY 方法,这意味着不会在所有地方冗长地添加 AsNoTracking()

这种方法可以很容易地与 where 子句结合使用:

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

public IQueryable<User> Users => UserStore.AsNoTracking().Where(u => !u.Deactivated);

过滤器也可以工作,但这种方法的一个优点是当您确实也确实需要访问已停用的用户时,很容易破例。

关于c# - Entity Framework 向所有查询添加 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52608476/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com