是否有一些覆盖或指定的功能可用于所有查询执行

时间:2019-04-16 00:27:10

标签: c# entity-framework

我正在使用Entity Framework,并且有一个动态where条件,我希望添加到所有查询中。现在,无需遍历我的所有代码并添加该条件,而是可以在某个地方添加它,就像在执行所有查询之前调用的所有查询的指定函数一样?

3 个答案:

答案 0 :(得分:0)

在单独的类中构建查询(例如查询生成器)。然后在调用方中执行它。然后用另一个类(装饰器)包装(装饰)构建器,该类将在结果查询中附加您想要的条件:

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容器的support具有一流的decorators

答案 1 :(得分:0)

另一个选项是Global Query Filter,但是仅EF Core 2.0支持。

答案 2 :(得分:0)

可以添加全局查询过滤器,以便将where子句附加到所有查询。基本上,您只需在DbContext中重写OnModelCreating方法,然后将HasQueryFilter添加到所需的实体。

有关更多信息,请查看此资源-https://docs.microsoft.com/en-us/ef/core/querying/filters