Есть ли какая-то переопределенная или назначенная функция для всего выполнения запроса - PullRequest
1 голос
/ 16 апреля 2019

Я использую Entity Framework, и есть динамическое условие where, которое я хочу добавить ко всем запросам.Теперь, вместо того чтобы просмотреть весь мой код и добавить это условие, есть ли какое-то место, где я могу его добавить, что-то вроде назначенной функции для всех запросов, вызываемых до их выполнения?

Ответы [ 3 ]

0 голосов
/ 16 апреля 2019

Другой вариант будет Global Query Filter , но он поддерживается только EF Core 2.0.

0 голосов
/ 16 апреля 2019

Глобальные фильтры запросов могут быть добавлены так, чтобы предложение where было присоединено ко всем вашим запросам. По сути, вы просто переопределяете метод OnModelCreating в своем DbContext и добавляете HasQueryFilter к нужным объектам.

Для получения дополнительной информации посмотрите на этот ресурс - https://docs.microsoft.com/en-us/ef/core/querying/filters

0 голосов
/ 16 апреля 2019

Создание запросов в отдельном классе (например, построитель запросов). Затем выполните это в вызывающем. Затем оберните (украсьте) конструктор другим классом (декоратором), который добавит результирующий запрос с условиями, которые вам нужны:

interface IQueryBuilder
{
    IQuerable<T> BuildQuery<T>(...);
}

class EntityFrameworkQueryBuilder : IQueryBuilder
{
    public IQuerable<T> BuildQuery<T>(...) => query;
}

class PostConditionQueryBuilderDecorator : IQueryBuilder
{
    ctor(IQueryBuilder builder) => _builder = builder;

    public IQuerable<T> BuildQuery<T>(...) => query.Where(x => x.Foo != bar);
}

Многие DI-контейнеры имеют первоклассную поддержку для декораторов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...