diff --git a/src/EFCore/Metadata/Builders/EntityTypeBuilder.cs b/src/EFCore/Metadata/Builders/EntityTypeBuilder.cs
index 3a5f3b5826e..16d89c0f017 100644
--- a/src/EFCore/Metadata/Builders/EntityTypeBuilder.cs
+++ b/src/EFCore/Metadata/Builders/EntityTypeBuilder.cs
@@ -822,7 +822,7 @@ public virtual EntityTypeBuilder HasQueryFilter(LambdaExpression? filter)
/// The same builder instance so that multiple configuration calls can be chained.
public virtual EntityTypeBuilder HasQueryFilter(string filterKey, LambdaExpression? filter)
{
- Builder.HasQueryFilter(new QueryFilter(filterKey, filter));
+ Builder.HasQueryFilter(new QueryFilter(filterKey, filter, ConfigurationSource.Explicit));
return this;
}
diff --git a/test/EFCore.Tests/Metadata/Internal/InternalEntityTypeBuilderTest.cs b/test/EFCore.Tests/Metadata/Internal/InternalEntityTypeBuilderTest.cs
index b27a7c1c82f..80b95391f68 100644
--- a/test/EFCore.Tests/Metadata/Internal/InternalEntityTypeBuilderTest.cs
+++ b/test/EFCore.Tests/Metadata/Internal/InternalEntityTypeBuilderTest.cs
@@ -3394,6 +3394,27 @@ public void Can_replace_named_query_filter_only_with_lower_or_equal_source()
Assert.NotEqual(filterExpression2, entityBuilder.Metadata.FindDeclaredQueryFilter(filterKey).Expression);
}
+ [ConditionalFact]
+ public void Can_override_named_query_filter_from_convention_with_explicit_configuration()
+ {
+ var modelBuilder = CreateModelBuilder();
+ var entityBuilder = modelBuilder.Entity(typeof(Order), ConfigurationSource.Explicit);
+
+ LambdaExpression conventionFilter = (Order o) => o.Id == 1;
+ LambdaExpression explicitFilter = (Order o) => o.Id == 2;
+ const string filterKey = "testFilter";
+
+ entityBuilder.HasQueryFilter(new QueryFilter(filterKey, conventionFilter, ConfigurationSource.Convention));
+ Assert.Same(conventionFilter, entityBuilder.Metadata.FindDeclaredQueryFilter(filterKey).Expression);
+ Assert.Equal(ConfigurationSource.Convention, entityBuilder.Metadata.GetQueryFilterConfigurationSource(filterKey));
+
+ var publicBuilder = new EntityTypeBuilder(entityBuilder.Metadata);
+ publicBuilder.HasQueryFilter(filterKey, explicitFilter);
+
+ Assert.Same(explicitFilter, entityBuilder.Metadata.FindDeclaredQueryFilter(filterKey).Expression);
+ Assert.Equal(ConfigurationSource.Explicit, entityBuilder.Metadata.GetQueryFilterConfigurationSource(filterKey));
+ }
+
private static TestLogger CreateTestLogger()
=> new() { EnabledFor = LogLevel.Warning };