2016-11-16 2 views
0

Есть ли способ универсально добавить предложение where ко всем запросам, которые запускает EF? Я хочу, чтобы все запросы, чтобы работать с «entity.Active == правда», напримерEF 6 - Inject where where

ответ

0

Самый простой способ (без реализации интерфейса QueryTranslator) является создание метода расширения для контекста, как этот

public static IQyertable<YourEntity> OnlyActiveEntities(this YourDbContext context, Action<DbSet<YourEntity>> setConfigurator = null) 
{ 
    var dbSet = context.Set<YourEntity>(); 
    setConfigurator?.Invoke(dbSet); 

    return context.Set<YourEntity>().AsQueriable().Where(entity => entity.Active == true); 
} 
1

Некоторые третья сторона библиотека позволяет фильтровать запросы: Entity Framework Filter Library List

Отказ от ответственности: Я владелец проекта Entity Framework Plus

Wiki: EF + Query Фильтр

Эта функция - именно то, что вы ищете. Вы можете добавить глобальный фильтр для фильтрации всех запросов.

Пример:

// using Z.EntityFramework.Plus; // Don't forget to include this. 

QueryFilterManager.Filter<ISoftDelete>(q => q.Where(x => x.IsActive));