Ale*_*lex 2 c# linq entity-framework
我有一个使用实体框架和 AspNet Identity 的项目。
IdentityUser 的参数之一是停用字段。
在应用程序中,如果我想获得用户,我会这样做:
var users = Context.Users //etc....
Run Code Online (Sandbox Code Playgroud)
但是,我不希望此查询返回任何已停用的用户。我知道我可以做到这一点
var users = Context.Users.Where(x => x.Deactivated != true);
Run Code Online (Sandbox Code Playgroud)
然而,我不愿意这样做,因为我确信有一天有人会忘记添加这个 where 子句。
有没有办法让实体对所有上下文查询自动执行此操作?我发现了这个:
https://learn.microsoft.com/en-us/ef/core/querying/filters
但我没有 EF core,无法升级到它。
我知道我可以制作一个包装函数并调用它,但我正在尝试找到更好的解决方案......
XXXStore我经常使用成员和XXX成员的组合,其中 theXXXStore是 the DBSet,theXXX是带有 的查询AsNoTracking()。然后,我XXX在响应GETs 的查询中使用这些成员,并且XXXStore仅当我想更新数据库时才使用这些成员。例如
public DbSet<User> UserStore { get; set; }
public IQueryable<User> Users => UserStore.AsNoTracking();
Run Code Online (Sandbox Code Playgroud)
这样做的优点是不跟踪不会更新的实体,但使用 DRY 方法意味着不会AsNoTracking()在各处添加冗长的内容。
这种方法可以很容易地与一个子句结合起来where:
public DbSet<User> UserStore { get; set; }
public IQueryable<User> Users => UserStore.AsNoTracking().Where(u => !u.Deactivated);
Run Code Online (Sandbox Code Playgroud)
过滤器也可以工作,但这种方法的一个优点是,当您确实需要访问已停用的用户时,很容易做出例外。
| 归档时间: |
|
| 查看次数: |
2484 次 |
| 最近记录: |