【发布时间】:2020-11-22 17:36:45
【问题描述】:
全局查询过滤器在实现租户和软删除功能时非常方便。
但我的问题是,例如,当我使用连接编写查询时
dbContext
.entity1
.Include("entity2.entity3.entity4")
.Where(something)
.select(something)
.toList();
这些实体中的每一个都有全局过滤器,然后在生成的 SQL 中,我为每个 JOIN 获得一个完整的子查询,它选择该实体的所有字段并检查全局过滤器。
但我不想那样。我希望全局过滤器仅适用于查询的根实体 (entity1),并且所有其他实体正常加入。
顺便说一句,实体的关系是:
- 1 个实体4 -> N 个实体3
- 1 个实体3 -> N 个实体2
- 1 个实体2 -> N 个实体1
在我的例子中,每个实体都会设置其“租户”字段,当软删除一个实体时,该软删除会级联到它的所有子项和子项。 因为为每个连接检查这些字段完全是浪费时间。
【问题讨论】:
-
也许你可以试试
IgnoreQueryFilters()禁用全局过滤器。docs.microsoft.com/en-us/ef/core/querying/…。 -
不能这样做。我需要那些全局过滤器,但我只需要将它们应用于 FROM 实体。它们不得应用于 JOIN 实体
标签: c# linq asp.net-core entity-framework-core