Как проверить указанный столбец c при каждом попадании в репозиторий для указанной таблицы c? - PullRequest
0 голосов
/ 29 апреля 2020

Tech:. Net Core, EF Core 3.0, Abp

Получил столбец «Включен» на таблице, и вместо того, чтобы проходить каждый Repository.GetAll() удар и добавлять .Where(w => w.Enabled), есть ли способ Я могу сделать это проверкой по умолчанию?

У меня был поиск по "Глобальным фильтрам", но я точно не нашел то, что, как мне кажется, я ожидал.

Приветствия

1 Ответ

0 голосов
/ 29 апреля 2020

Насколько я понимаю, это именно то, для чего нужны глобальные фильтры. В вашем DbContext вы должны указать, какие таблицы имеют флаг IsEnabled, и он будет автоматически применен.

https://entityframeworkcore.com/querying-data-global-filter

public class MyContext : DbContext
{
    public DbSet<Customer> Customers { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(@"Data Source=(localdb)\ProjectsV13;Initial Catalog=CustomerDB;");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Customer>().HasQueryFilter(c => !c.IsDeleted);
    }
}

Если у вас есть любые запросы, которые не требуют применения глобального фильтра, можно использовать IgnoreQueryFilters () для вашего запроса.

using (var context = new MyContext())
{
    var customers = context.Customers
        .IgnoreQueryFilters().ToList();
}
...