Entity framework core 禁用全局查询筛选器*在*另一个全局查询筛选器内

Entity framework core 禁用全局查询筛选器*在*另一个全局查询筛选器内,entity-framework-core,Entity Framework Core,目前正在使用EF Core 3.1(虽然很快升级到EF Core 5,所以如果在该版本中变得更容易,我仍然感兴趣) 我正在实现一些基于各种标准限制对实体数据的访问 其中一个过滤器对一种称为“遭遇”的类型进行操作。一次邂逅链接到一个人(通过外键PersonID),但一个人可以有多次邂逅。Person记录具有通过Person.Conferences链接到所有遭遇的导航属性 Conference的查询过滤器是基于Conference上特定属性的值来限制记录的(称之为EnferenceType)。如果我

目前正在使用EF Core 3.1(虽然很快升级到EF Core 5,所以如果在该版本中变得更容易,我仍然感兴趣)

我正在实现一些基于各种标准限制对实体数据的访问

其中一个过滤器对一种称为“遭遇”的类型进行操作。一次邂逅链接到一个人(通过外键
PersonID
),但一个人可以有多次邂逅。Person记录具有通过
Person.Conferences
链接到所有遭遇的导航属性

Conference的查询过滤器是基于Conference上特定属性的值来限制记录的(称之为
EnferenceType
)。如果我的查询筛选器类似于以下内容,则此选项可以正常工作:

x => x.EncounterType == "MyType"
x => x.Person.Encounters.Any(y => y.EncounterType == "MyType")
但是,我需要扩展此逻辑,以便在与此人相关的任何遭遇满足标准时允许/加载遭遇

因此,Conference的查询过滤器需要如下所示:

x => x.EncounterType == "MyType"
x => x.Person.Encounters.Any(y => y.EncounterType == "MyType")
这目前不起作用,因为我们遇到了一个循环和StackOverflowException1;Conference的全局查询过滤器最终会无限扩展自身。(我认为这是因为我们访问了
Person.Conferences
导航属性,并为
Person.Conferences
中的每次遭遇计算相同的遭遇查询筛选器)

我真正想做的是完全禁用此特定表达式中使用的任何导航属性的全局查询筛选器。在这种情况下,我想考虑与该人相关的所有其他遭遇,而不需要进一步过滤。

我知道在实际运行查询时,我可以调用
IgnoreQueryFilters()
。我想要类似的东西,但在表达式内部或使用
HasQueryFilter()
添加查询筛选器时可用

这可能吗?有没有其他方法可以通过全局查询过滤器实现这一点?



[1] 这虽然令人沮丧,但对我来说非常酷……我从未在StackOverflow上发布过关于实际堆栈溢出的问题:)

是的。。。这是一个循环,正如注释中所警告的那样。恐怕你对此无能为力。