Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/EFCore/Metadata/Builders/EntityTypeBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -822,7 +822,7 @@ public virtual EntityTypeBuilder HasQueryFilter(LambdaExpression? filter)
/// <returns>The same builder instance so that multiple configuration calls can be chained.</returns>
public virtual EntityTypeBuilder HasQueryFilter(string filterKey, LambdaExpression? filter)
{
Builder.HasQueryFilter(new QueryFilter(filterKey, filter));
Builder.HasQueryFilter(new QueryFilter(filterKey, filter, ConfigurationSource.Explicit));

return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3394,6 +3394,31 @@ 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()
{
// This test verifies that named query filters set by conventions can be overridden by 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";

// Convention sets a named query filter
entityBuilder.HasQueryFilter(new QueryFilter(filterKey, conventionFilter, ConfigurationSource.Convention));
Assert.Same(conventionFilter, entityBuilder.Metadata.FindDeclaredQueryFilter(filterKey).Expression);
Assert.Equal(ConfigurationSource.Convention, entityBuilder.Metadata.GetQueryFilterConfigurationSource(filterKey));

// Public API should be able to override it
var publicBuilder = new EntityTypeBuilder(entityBuilder.Metadata);
publicBuilder.HasQueryFilter(filterKey, explicitFilter);

// Verify the filter was replaced with the explicit one
Assert.Same(explicitFilter, entityBuilder.Metadata.FindDeclaredQueryFilter(filterKey).Expression);
Assert.Equal(ConfigurationSource.Explicit, entityBuilder.Metadata.GetQueryFilterConfigurationSource(filterKey));
}

private static TestLogger<DbLoggerCategory.Model, TestLoggingDefinitions> CreateTestLogger()
=> new() { EnabledFor = LogLevel.Warning };

Expand Down