C# 仅用于GET方法的全局查询筛选器
我有一张桌子:C# 仅用于GET方法的全局查询筛选器,c#,entity-framework,C#,Entity Framework,我有一张桌子: [Table("Employee")] public class Employee { [Key] public int Id { get; set; } public string Name { get; set; } public bool IsDeleted { get; set; } } 我添加了软删除属性“IsDeleted”。为此,我添加了
[Table("Employee")]
public class Employee
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public bool IsDeleted { get; set; }
}
我添加了软删除属性“IsDeleted”。为此,我添加了过滤器,这样当我收到所有员工的请求时,软删除的数据不会显示出来。到目前为止,它工作正常,我得到了所有未“IsDeleted”的用户列表,我可以请求删除一名员工,然后发出get请求,被删除的用户不在接收列表中。以下是过滤器:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Employee>()
.HasQueryFilter(p => !p.IsDeleted);
base.OnModelCreating(modelBuilder);
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.HasQueryFilter(p=>!p.IsDeleted);
基于模型创建(modelBuilder);
}
现在主要的问题是-如何使这个过滤器只在GET请求下工作?因为目前,我只能将“isDeleted”=设置为true,但无法恢复employee(将“isDeleted”更改为“false”)。无法对软删除的员工执行任何操作。如果要使用具有查询筛选器的
DbSet
,但需要访问已筛选的对象,可以使用该方法,例如:
var deletedUsers = context.Employees
.IgnoreQueryFilters()
.Where(e => e.IsDeleted);
只需对“写入”场景使用
IgnoreQueryFilters()
。。。