【问题标题】:Global Query Filter only for GET method全局查询过滤器仅适用于 GET 方法
【发布时间】:2019-06-18 11:33:05
【问题描述】:

我有一张桌子:

    [Table("Employee")]  
    public class Employee  
    {  
        [Key]  
        public int Id { get; set; }  
        public string Name { get; set; }  
        public bool IsDeleted { get; set; }  
    }  

我添加了软删除属性“IsDeleted”。为此,我添加了过滤器,因此当我执行 GET all employees 请求时,不会显示软删除的数据。到目前为止它工作正常,我得到了所有不是“IsDeleted”的用户的列表,我可以请求删除员工,然后发出获取请求,并且删除的用户不在收到的列表中。这是过滤器:

protected override void OnModelCreating(ModelBuilder modelBuilder)  
{  
    modelBuilder.Entity<Employee>()  
        .HasQueryFilter(p => !p.IsDeleted);  

    base.OnModelCreating(modelBuilder);  
}  

现在主要的问题是 - 我如何让这个过滤器只对 GET 请求起作用?因为目前,我只能设置“isDeleted”=true,但无法恢复员工(将“isDeleted”更改为“false”)。对软删除的员工无能为力。

【问题讨论】:

  • 只需将IgnoreQueryFilters() 用于“写入”场景...

标签: c# entity-framework


【解决方案1】:

如果您想使用具有查询过滤器的DbSet,但需要访问已过滤的对象,您可以使用IgnoreQueryFilters 方法,例如:

var deletedUsers = context.Employees
    .IgnoreQueryFilters()
    .Where(e => e.IsDeleted);

【讨论】:

    猜你喜欢
    • 2021-06-08
    • 1970-01-01
    • 2022-01-22
    • 2011-10-17
    • 2021-08-21
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多