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 };