@@ -3394,6 +3394,30 @@ public void Can_replace_named_query_filter_only_with_lower_or_equal_source()
33943394 Assert . NotEqual ( filterExpression2 , entityBuilder . Metadata . FindDeclaredQueryFilter ( filterKey ) . Expression ) ;
33953395 }
33963396
3397+ [ ConditionalFact ]
3398+ public void Can_override_named_query_filter_from_convention_with_explicit_configuration ( )
3399+ {
3400+ // This test verifies that named query filters set by conventions can be overridden by explicit configuration
3401+ var modelBuilder = CreateModelBuilder ( ) ;
3402+ var entityBuilder = modelBuilder . Entity ( typeof ( Order ) , ConfigurationSource . Explicit ) ;
3403+
3404+ LambdaExpression conventionFilter = ( Order o ) => o . Id == 1 ;
3405+ LambdaExpression explicitFilter = ( Order o ) => o . Id == 2 ;
3406+ const string filterKey = "testFilter" ;
3407+
3408+ // Convention sets a named query filter
3409+ entityBuilder . HasQueryFilter ( new QueryFilter ( filterKey , conventionFilter , ConfigurationSource . Convention ) ) ;
3410+ Assert . Same ( conventionFilter , entityBuilder . Metadata . FindDeclaredQueryFilter ( filterKey ) . Expression ) ;
3411+ Assert . Equal ( ConfigurationSource . Convention , entityBuilder . Metadata . GetQueryFilterConfigurationSource ( filterKey ) ) ;
3412+
3413+ // Public API should be able to override it
3414+ var publicBuilder = new EntityTypeBuilder ( entityBuilder . Metadata ) ;
3415+ publicBuilder . HasQueryFilter ( filterKey , explicitFilter ) ;
3416+ // Verify the filter was replaced with the explicit one
3417+ Assert . Same ( explicitFilter , entityBuilder . Metadata . FindDeclaredQueryFilter ( filterKey ) . Expression ) ;
3418+ Assert . Equal ( ConfigurationSource . Explicit , entityBuilder . Metadata . GetQueryFilterConfigurationSource ( filterKey ) ) ;
3419+ }
3420+
33973421 private static TestLogger < DbLoggerCategory . Model , TestLoggingDefinitions > CreateTestLogger ( )
33983422 => new ( ) { EnabledFor = LogLevel . Warning } ;
33993423
0 commit comments