Глобальный фильтр запросов только для метода GET - PullRequest
2 голосов
/ 18 июня 2019

У меня есть таблица:

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

И я добавил атрибут мягкого удаления "IsDeleted". Для этого я добавил фильтр, чтобы удаленные данные не отображались, когда я получаю запрос всех сотрудников. Пока все работает нормально, я получаю список всех пользователей, которые не являются "IsDeleted", и я могу сделать запрос на удаление сотрудника, а затем сделать запрос на получение, и удаленного пользователя нет в полученном списке. Вот фильтр:

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

    base.OnModelCreating(modelBuilder);  
}  

Теперь главная проблема - как заставить этот фильтр работать только с GET-запросом? Потому что в настоящее время я могу установить только «isDeleted» = true, но не могу восстановить сотрудника (измените «isDeleted» на «false»). Ничего нельзя поделать с сотрудниками, которые удалены из списка.

1 Ответ

2 голосов
/ 18 июня 2019

Если вы хотите работать с DbSet, который имеет фильтр запросов, но требует доступа к объектам, которые были отфильтрованы, вы можете использовать метод IgnoreQueryFilters, например:

var deletedUsers = context.Employees
    .IgnoreQueryFilters()
    .Where(e => e.IsDeleted);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...