所有查询执行都有一些覆盖或指定的函数

问题描述 投票:1回答:3

我正在使用实体框架,并且我希望添加到所有查询中的动态where条件。现在,而不是通过我的所有代码并添加该条件,是否有一些我可以添加它的地方,有点像所有查询的指定函数,在执行之前调用?

c# entity-framework
3个回答
0
投票

另一种选择是Global Query Filter,但它只受EF Core 2.0的支持。


0
投票

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

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


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

© www.soinside.com 2019 - 2024. All rights reserved.