From f7e01eaac3b56d29aecd9613927417b92aa7717d Mon Sep 17 00:00:00 2001 From: Shay Rojansky Date: Fri, 25 Jul 2025 00:06:57 +0200 Subject: [PATCH] Make indexing work over complex JSON collections Part of #36296 --- ...yableMethodTranslatingExpressionVisitor.cs | 51 +++++++++++++++---- .../ComplexJsonCollectionSqlServerTest.cs | 20 +++----- .../NavigationsCollectionSqlServerTest.cs | 4 ++ .../OwnedJsonCollectionSqlServerTest.cs | 24 ++++----- ...OwnedNavigationsCollectionSqlServerTest.cs | 5 +- .../ComplexJsonCollectionSqliteTest.cs | 9 +--- .../ComplexJsonMiscellaneousSqliteTest.cs | 4 +- .../ComplexJsonSetOperationsSqliteTest.cs | 5 +- ...exTableSplittingMiscellaneousSqliteTest.cs | 4 +- .../NavigationsCollectionSqliteTest.cs | 4 +- .../NavigationsIncludeSqliteTest.cs | 4 +- .../NavigationsMiscellaneousSqliteTest.cs | 4 +- .../NavigationsSetOperationsSqliteTest.cs | 4 +- .../OwnedJsonMiscellaneousSqliteTest.cs | 4 +- ...OwnedNavigationsMiscellaneousSqliteTest.cs | 4 +- ...edTableSplittingMiscellaneousSqliteTest.cs | 4 +- 16 files changed, 80 insertions(+), 74 deletions(-) diff --git a/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs b/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs index 48f63e6c20c..bd15654c4ba 100644 --- a/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs +++ b/src/EFCore.Relational/Query/RelationalQueryableMethodTranslatingExpressionVisitor.cs @@ -1551,6 +1551,7 @@ private sealed class SharedTypeEntityExpandingExpressionVisitor( { private readonly SqlAliasManager _sqlAliasManager = queryableTranslator._sqlAliasManager; private SelectExpression _selectExpression = null!; + private bool _bindComplexProperties; public Expression Expand(SelectExpression selectExpression, Expression lambdaBody) { @@ -1564,6 +1565,7 @@ protected override Expression VisitMember(MemberExpression memberExpression) var innerExpression = Visit(memberExpression.Expression); return TryExpand(innerExpression, MemberIdentity.Create(memberExpression.Member)) + ?? TryBindPropertyAccess(innerExpression, memberExpression.Member.Name) ?? memberExpression.Update(innerExpression); } @@ -1574,10 +1576,17 @@ protected override Expression VisitMethodCall(MethodCallExpression methodCallExp source = Visit(source); return TryExpand(source, MemberIdentity.Create(navigationName)) - ?? TryBindPrimitiveCollection(source, navigationName) - ?? methodCallExpression.Update(null!, new[] { source, methodCallExpression.Arguments[1] }); + ?? TryBindPropertyAccess(source, navigationName) + ?? methodCallExpression.Update(null!, [source, methodCallExpression.Arguments[1]]); } + // The following is a hack. + // In preprocessing, SubqueryMemberPushdownExpressionVisitor rewrites ElementAt(0).Int to Select(s => s.Int).ElementAt(0), + // as that's apparently needed for NavigationExpandingExpressionVisitor to work correctly; + // see https://github.com/dotnet/efcore/issues/30386#issuecomment-1452643142 for more context. + // Here, we pattern match the resulting Select(s => s.Int).ElementAt(0) over JsonQueryExpression to properly identify the + // indexing operation and translate it. + // Note that this happens for both owned and complex JSON-mapped types. if (methodCallExpression.Method.IsGenericMethod && (methodCallExpression.Method.GetGenericMethodDefinition() == QueryableMethods.ElementAt || methodCallExpression.Method.GetGenericMethodDefinition() == QueryableMethods.ElementAtOrDefault)) @@ -1600,7 +1609,16 @@ protected override Expression VisitMethodCall(MethodCallExpression methodCallExp source = maybeAsQueryableMethodCall.Arguments[0]; } + // This special visitor normally only handles owned access, and not complex properties; all complex property access + // is handled in RelationalSqlTranslatingExpressionVisitor as usual. + // However, indexing over complex JSON-mapped collection is mangled in preprocessing just like it is for owned + // entities (see comment above). So we very specifically handle complex properties as part of the pattern matching + // hack here, to make sure indexing works properly. + // #36335 tracks removing the preprocessing mangling, at which point this should no longer be needed + var parentBindComplexProperties = _bindComplexProperties; + _bindComplexProperties = true; source = Visit(source); + _bindComplexProperties = parentBindComplexProperties; if (source is JsonQueryExpression jsonQueryExpression) { @@ -1666,15 +1684,15 @@ static Expression PrepareFailedTranslationResult( var result = source; if (asQueryable != null) { - result = asQueryable.Update(null, new[] { result }); + result = asQueryable.Update(null, [result]); } if (select != null) { - result = select.Update(null, new[] { result, select.Arguments[1] }); + result = select.Update(null, [result, select.Arguments[1]]); } - return elementAt.Update(null, new[] { result, elementAt.Arguments[1] }); + return elementAt.Update(null, [result, elementAt.Arguments[1]]); } static bool IsValidSelectorForJsonArrayElementAccess(Expression expression, JsonQueryExpression baselineJsonQuery) @@ -1907,7 +1925,7 @@ static TableExpressionBase FindRootTableExpressionForColumn(SelectExpression sel } } - private Expression? TryBindPrimitiveCollection(Expression? source, string memberName) + private Expression? TryBindPropertyAccess(Expression? source, string memberName) { while (source is IncludeExpression includeExpression) { @@ -1937,12 +1955,27 @@ static TableExpressionBase FindRootTableExpressionForColumn(SelectExpression sel } var property = type.FindProperty(memberName); - if (property?.IsPrimitiveCollection != true) + if (property?.IsPrimitiveCollection is true) { - return null; + return source.CreateEFPropertyExpression(property); + } + + // See comments on indexing-related hacks in VisitMethodCall above + if (_bindComplexProperties + && type.FindComplexProperty(memberName) is IComplexProperty { IsCollection: true } complexProperty) + { + Check.DebugAssert(complexProperty.ComplexType.IsMappedToJson()); + + if (queryableTranslator._sqlTranslator.TryBindMember( + queryableTranslator._sqlTranslator.Visit(source), MemberIdentity.Create(memberName), + out var translatedExpression, out _) + && translatedExpression is CollectionResultExpression { QueryExpression: JsonQueryExpression jsonQuery }) + { + return jsonQuery; + } } - return source.CreateEFPropertyExpression(property); + return null; } private sealed class AnnotationApplyingExpressionVisitor(IReadOnlyList annotations) : ExpressionVisitor diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Relationships/ComplexJson/ComplexJsonCollectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Relationships/ComplexJson/ComplexJsonCollectionSqlServerTest.cs index b79021e995d..ec05827f5db 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Relationships/ComplexJson/ComplexJsonCollectionSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Relationships/ComplexJson/ComplexJsonCollectionSqlServerTest.cs @@ -120,23 +120,19 @@ public override async Task Distinct_over_projected_filtered_nested_collection() public override async Task Index_constant() { - // Complex collection indexing currently fails because SubqueryMemberPushdownExpressionVisitor moves the Int member access to before the - // ElementAt (making a Select()), this interferes with our translation. See #36335. - await Assert.ThrowsAsync(() => base.Index_constant()); + await base.Index_constant(); AssertSql( """ SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] FROM [RootEntity] AS [r] -WHERE CAST(JSON_VALUE([r].[RelatedCollection], '$[0]') AS int) = 8 +WHERE CAST(JSON_VALUE([r].[RelatedCollection], '$[0].Int') AS int) = 8 """); } public override async Task Index_parameter() { - // Complex collection indexing currently fails because SubqueryMemberPushdownExpressionVisitor moves the Int member access to before the - // ElementAt (making a Select()), this interferes with our translation. See #36335. - await Assert.ThrowsAsync(() => base.Index_parameter()); + await base.Index_parameter(); AssertSql( """ @@ -144,21 +140,19 @@ public override async Task Index_parameter() SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] FROM [RootEntity] AS [r] -WHERE CAST(JSON_VALUE([r].[RelatedCollection], '$[' + CAST(@i AS nvarchar(max)) + ']') AS int) = 8 +WHERE CAST(JSON_VALUE([r].[RelatedCollection], '$[' + CAST(@i AS nvarchar(max)) + '].Int') AS int) = 8 """); } public override async Task Index_column() { - // Complex collection indexing currently fails because SubqueryMemberPushdownExpressionVisitor moves the Int member access to before the - // ElementAt (making a Select()), this interferes with our translation. See #36335. - await Assert.ThrowsAsync(() => base.Index_column()); + await base.Index_column(); AssertSql( """ SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] FROM [RootEntity] AS [r] -WHERE CAST(JSON_VALUE([r].[RelatedCollection], '$[' + CAST([r].[Id] - 1 AS nvarchar(max)) + ']') AS int) = 8 +WHERE CAST(JSON_VALUE([r].[RelatedCollection], '$[' + CAST([r].[Id] - 1 AS nvarchar(max)) + '].Int') AS int) = 8 """); } @@ -170,7 +164,7 @@ public override async Task Index_out_of_bounds() """ SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] FROM [RootEntity] AS [r] -WHERE CAST(JSON_VALUE([r].[RelatedCollection], '$[9999]') AS int) = 8 +WHERE CAST(JSON_VALUE([r].[RelatedCollection], '$[9999].Int') AS int) = 8 """); } diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Relationships/Navigations/NavigationsCollectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Relationships/Navigations/NavigationsCollectionSqlServerTest.cs index 851a70ffa62..1cedabb7050 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Relationships/Navigations/NavigationsCollectionSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Relationships/Navigations/NavigationsCollectionSqlServerTest.cs @@ -105,6 +105,8 @@ public override async Task Distinct_over_projected_filtered_nested_collection() #endregion Distinct + #region Index + public override async Task Index_constant() { await base.Index_constant(); @@ -133,6 +135,8 @@ public override async Task Index_out_of_bounds() AssertSql(); } + #endregion Index + public override async Task Select_within_Select_within_Select_with_aggregates() { await base.Select_within_Select_within_Select_with_aggregates(); diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Relationships/OwnedJson/OwnedJsonCollectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Relationships/OwnedJson/OwnedJsonCollectionSqlServerTest.cs index 1f48840c07e..0d0979b912a 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Relationships/OwnedJson/OwnedJsonCollectionSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Relationships/OwnedJson/OwnedJsonCollectionSqlServerTest.cs @@ -40,18 +40,6 @@ [String] nvarchar(max) '$.String' """); } - public override async Task Index_constant() - { - await base.Index_constant(); - - AssertSql( - """ -SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] -FROM [RootEntity] AS [r] -WHERE CAST(JSON_VALUE([r].[RelatedCollection], '$[0].Int') AS int) = 8 -"""); - } - public override async Task OrderBy_ElementAt() { await base.OrderBy_ElementAt(); @@ -146,6 +134,18 @@ public override async Task Distinct_over_projected_filtered_nested_collection() #region Index + public override async Task Index_constant() + { + await base.Index_constant(); + + AssertSql( + """ +SELECT [r].[Id], [r].[Name], [r].[OptionalRelated], [r].[RelatedCollection], [r].[RequiredRelated] +FROM [RootEntity] AS [r] +WHERE CAST(JSON_VALUE([r].[RelatedCollection], '$[0].Int') AS int) = 8 +"""); + } + public override async Task Index_parameter() { await base.Index_parameter(); diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/Relationships/OwnedNavigations/OwnedNavigationsCollectionSqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/Relationships/OwnedNavigations/OwnedNavigationsCollectionSqlServerTest.cs index 5442966debf..6a25a58613c 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/Relationships/OwnedNavigations/OwnedNavigationsCollectionSqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/Relationships/OwnedNavigations/OwnedNavigationsCollectionSqlServerTest.cs @@ -101,7 +101,6 @@ ORDER BY [r0].[Id] """); } - #region Distinct public override async Task Distinct() @@ -181,6 +180,8 @@ public override async Task Distinct_over_projected_filtered_nested_collection() #endregion Distinct + #region Index + public override async Task Index_constant() { await base.Index_constant(); @@ -315,6 +316,8 @@ ORDER BY (SELECT 1) """); } + #endregion Index + public override async Task Select_within_Select_within_Select_with_aggregates() { await base.Select_within_Select_within_Select_with_aggregates(); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/ComplexJson/ComplexJsonCollectionSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/ComplexJson/ComplexJsonCollectionSqliteTest.cs index 778ed53f343..e3b8de9dd1a 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/ComplexJson/ComplexJsonCollectionSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/ComplexJson/ComplexJsonCollectionSqliteTest.cs @@ -1,14 +1,7 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using Microsoft.Data.Sqlite; - namespace Microsoft.EntityFrameworkCore.Query.Relationships.ComplexJson; public class ComplexJsonCollectionSqliteTest(ComplexJsonSqliteFixture fixture, ITestOutputHelper testOutputHelper) - : ComplexJsonCollectionRelationalTestBase(fixture, testOutputHelper) -{ - // TODO: #36296 - public override Task Index_column() - => Assert.ThrowsAsync(() => base.Index_column()); -} + : ComplexJsonCollectionRelationalTestBase(fixture, testOutputHelper); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/ComplexJson/ComplexJsonMiscellaneousSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/ComplexJson/ComplexJsonMiscellaneousSqliteTest.cs index 710494a693b..c5aada6efd7 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/ComplexJson/ComplexJsonMiscellaneousSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/ComplexJson/ComplexJsonMiscellaneousSqliteTest.cs @@ -4,6 +4,4 @@ namespace Microsoft.EntityFrameworkCore.Query.Relationships.ComplexJson; public class ComplexJsonMiscellaneousSqliteTest(ComplexJsonSqliteFixture fixture, ITestOutputHelper testOutputHelper) - : ComplexJsonMiscellaneousRelationalTestBase(fixture, testOutputHelper) -{ -} + : ComplexJsonMiscellaneousRelationalTestBase(fixture, testOutputHelper); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/ComplexJson/ComplexJsonSetOperationsSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/ComplexJson/ComplexJsonSetOperationsSqliteTest.cs index 72924792150..0200a3d13f3 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/ComplexJson/ComplexJsonSetOperationsSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/ComplexJson/ComplexJsonSetOperationsSqliteTest.cs @@ -4,7 +4,4 @@ namespace Microsoft.EntityFrameworkCore.Query.Relationships.ComplexJson; public class ComplexJsonSetOperationsSqliteTest(ComplexJsonSqliteFixture fixture, ITestOutputHelper testOutputHelper) - : ComplexJsonSetOperationsRelationalTestBase(fixture, testOutputHelper) -{ - -} + : ComplexJsonSetOperationsRelationalTestBase(fixture, testOutputHelper); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/ComplexTableSplitting/ComplexTableSplittingMiscellaneousSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/ComplexTableSplitting/ComplexTableSplittingMiscellaneousSqliteTest.cs index 6c052704357..59abab0b7f6 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/ComplexTableSplitting/ComplexTableSplittingMiscellaneousSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/ComplexTableSplitting/ComplexTableSplittingMiscellaneousSqliteTest.cs @@ -6,6 +6,4 @@ namespace Microsoft.EntityFrameworkCore.Query.Relationships.ComplexTableSplittin public class ComplexTableSplittingMiscellaneousSqliteTest( ComplexTableSplittingSqliteFixture fixture, ITestOutputHelper testOutputHelper) - : ComplexTableSplittingMiscellaneousRelationalTestBase(fixture, testOutputHelper) -{ -} + : ComplexTableSplittingMiscellaneousRelationalTestBase(fixture, testOutputHelper); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/Navigations/NavigationsCollectionSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/Navigations/NavigationsCollectionSqliteTest.cs index eadf201ae8c..6a359b707c5 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/Navigations/NavigationsCollectionSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/Navigations/NavigationsCollectionSqliteTest.cs @@ -4,6 +4,4 @@ namespace Microsoft.EntityFrameworkCore.Query.Relationships.Navigations; public class NavigationsCollectionSqliteTest(NavigationsSqliteFixture fixture, ITestOutputHelper testOutputHelper) - : NavigationsCollectionRelationalTestBase(fixture, testOutputHelper) -{ -} + : NavigationsCollectionRelationalTestBase(fixture, testOutputHelper); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/Navigations/NavigationsIncludeSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/Navigations/NavigationsIncludeSqliteTest.cs index 4877974d684..3f5c64d41ce 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/Navigations/NavigationsIncludeSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/Navigations/NavigationsIncludeSqliteTest.cs @@ -4,6 +4,4 @@ namespace Microsoft.EntityFrameworkCore.Query.Relationships.Navigations; public class NavigationsIncludeSqliteTest(NavigationsSqliteFixture fixture, ITestOutputHelper testOutputHelper) - : NavigationsIncludeRelationalTestBase(fixture, testOutputHelper) -{ -} + : NavigationsIncludeRelationalTestBase(fixture, testOutputHelper); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/Navigations/NavigationsMiscellaneousSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/Navigations/NavigationsMiscellaneousSqliteTest.cs index bd5d29c2fc4..3ba53aebc95 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/Navigations/NavigationsMiscellaneousSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/Navigations/NavigationsMiscellaneousSqliteTest.cs @@ -6,6 +6,4 @@ namespace Microsoft.EntityFrameworkCore.Query.Relationships.Navigations; public class NavigationsMiscellaneousSqliteTest( NavigationsSqliteFixture fixture, ITestOutputHelper testOutputHelper) - : NavigationsMiscellaneousRelationalTestBase(fixture, testOutputHelper) -{ -} + : NavigationsMiscellaneousRelationalTestBase(fixture, testOutputHelper); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/Navigations/NavigationsSetOperationsSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/Navigations/NavigationsSetOperationsSqliteTest.cs index 2ee2792fe0a..7d8c5c95767 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/Navigations/NavigationsSetOperationsSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/Navigations/NavigationsSetOperationsSqliteTest.cs @@ -4,6 +4,4 @@ namespace Microsoft.EntityFrameworkCore.Query.Relationships.Navigations; public class NavigationsSetOperationsSqliteTest(NavigationsSqliteFixture fixture, ITestOutputHelper testOutputHelper) - : NavigationsSetOperationsRelationalTestBase(fixture, testOutputHelper) -{ -} + : NavigationsSetOperationsRelationalTestBase(fixture, testOutputHelper); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/OwnedJson/OwnedJsonMiscellaneousSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/OwnedJson/OwnedJsonMiscellaneousSqliteTest.cs index bd8d50d3e40..19547d91b07 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/OwnedJson/OwnedJsonMiscellaneousSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/OwnedJson/OwnedJsonMiscellaneousSqliteTest.cs @@ -4,6 +4,4 @@ namespace Microsoft.EntityFrameworkCore.Query.Relationships.OwnedJson; public class OwnedJsonMiscellaneousSqliteTest(OwnedJsonSqliteFixture fixture, ITestOutputHelper testOutputHelper) - : OwnedJsonMiscellaneousRelationalTestBase(fixture, testOutputHelper) -{ -} + : OwnedJsonMiscellaneousRelationalTestBase(fixture, testOutputHelper); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/OwnedNavigations/OwnedNavigationsMiscellaneousSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/OwnedNavigations/OwnedNavigationsMiscellaneousSqliteTest.cs index c1d032a4617..b586e4875a3 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/OwnedNavigations/OwnedNavigationsMiscellaneousSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/OwnedNavigations/OwnedNavigationsMiscellaneousSqliteTest.cs @@ -6,6 +6,4 @@ namespace Microsoft.EntityFrameworkCore.Query.Relationships.OwnedNavigations; public class OwnedNavigationsMiscellaneousSqliteTest( OwnedNavigationsSqliteFixture fixture, ITestOutputHelper testOutputHelper) - : OwnedNavigationsMiscellaneousRelationalTestBase(fixture, testOutputHelper) -{ -} + : OwnedNavigationsMiscellaneousRelationalTestBase(fixture, testOutputHelper); diff --git a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/OwnedTableSplitting/OwnedTableSplittingMiscellaneousSqliteTest.cs b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/OwnedTableSplitting/OwnedTableSplittingMiscellaneousSqliteTest.cs index e1eb9302394..1e36f01a1ae 100644 --- a/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/OwnedTableSplitting/OwnedTableSplittingMiscellaneousSqliteTest.cs +++ b/test/EFCore.Sqlite.FunctionalTests/Query/Relationships/OwnedTableSplitting/OwnedTableSplittingMiscellaneousSqliteTest.cs @@ -6,6 +6,4 @@ namespace Microsoft.EntityFrameworkCore.Query.Relationships.OwnedTableSplitting; public class OwnedTableSplittingMiscellaneousSqliteTest( OwnedTableSplittingSqliteFixture fixture, ITestOutputHelper testOutputHelper) - : OwnedTableSplittingMiscellaneousRelationalTestBase(fixture, testOutputHelper) -{ -} + : OwnedTableSplittingMiscellaneousRelationalTestBase(fixture, testOutputHelper);