From b09024e077c9e039420b1801c6d20599198e95c2 Mon Sep 17 00:00:00 2001 From: Smit Patel Date: Mon, 6 Jan 2020 12:36:17 -0800 Subject: [PATCH] Query: Add tests for indexer properties Resolves #19495 Resolves #19458 Changes - Sort indexer properties along with shadow properties during model diff for column ordering in a table - Updated documentation of IndexedProperty - Add IndexedProperty fluent API to owned navigation builder - Re-attach indexer property correctly after detach --- .../Internal/MigrationsModelDiffer.cs | 17 +- .../Metadata/Builders/EntityTypeBuilder.cs | 9 +- .../Builders/OwnedNavigationBuilder.cs | 40 + src/EFCore/Metadata/Internal/EntityType.cs | 117 +- .../Internal/InternalPropertyBuilder.cs | 11 +- .../Query/OwnedQueryCosmosTest.cs | 201 ++- .../Query/GearsOfWarQueryFixtureBase.cs | 3 +- .../Query/GearsOfWarQueryTestBase.cs | 88 -- .../Query/OwnedQueryTestBase.cs | 379 +++++- .../TestModels/GearsOfWarModel/City.cs | 25 +- .../GearsOfWarModel/GearsOfWarData.cs | 4 +- .../Query/GearsOfWarQuerySqlServerTest.cs | 92 -- .../Query/OwnedQuerySqlServerTest.cs | 1146 +++++++++++++---- .../Metadata/Internal/EntityTypeTest.cs | 16 + .../ModelBuilding/ModelBuilderGenericTest.cs | 6 + .../ModelBuilderNonGenericTest.cs | 6 + .../ModelBuilding/ModelBuilderTestBase.cs | 2 + .../ModelBuilding/NonRelationshipTestBase.cs | 92 ++ test/EFCore.Tests/ModelBuilding/TestModel.cs | 53 + 19 files changed, 1745 insertions(+), 562 deletions(-) diff --git a/src/EFCore.Relational/Migrations/Internal/MigrationsModelDiffer.cs b/src/EFCore.Relational/Migrations/Internal/MigrationsModelDiffer.cs index d9e5a08fde0..91ff8c53eb1 100644 --- a/src/EFCore.Relational/Migrations/Internal/MigrationsModelDiffer.cs +++ b/src/EFCore.Relational/Migrations/Internal/MigrationsModelDiffer.cs @@ -673,8 +673,8 @@ private static IEnumerable GetSortedProperties(TableMapping target) private static IEnumerable GetSortedProperties(IEntityType entityType) { - var shadowProperties = new List(); - var shadowPrimaryKeyProperties = new List(); + var leastPriorityProperties = new List(); + var leastPriorityPrimaryKeyProperties = new List(); var primaryKeyPropertyGroups = new Dictionary(); var groups = new Dictionary>(); var unorderedGroups = new Dictionary>(); @@ -683,11 +683,12 @@ private static IEnumerable GetSortedProperties(IEntityType entityType foreach (var property in entityType.GetDeclaredProperties()) { var clrProperty = property.PropertyInfo; - if (clrProperty == null) + if (clrProperty == null + || clrProperty.IsIndexerProperty()) { if (property.IsPrimaryKey()) { - shadowPrimaryKeyProperties.Add(property); + leastPriorityPrimaryKeyProperties.Add(property); continue; } @@ -696,7 +697,7 @@ private static IEnumerable GetSortedProperties(IEntityType entityType .FirstOrDefault(fk => fk.DependentToPrincipal?.PropertyInfo != null); if (foreignKey == null) { - shadowProperties.Add(property); + leastPriorityProperties.Add(property); continue; } @@ -746,7 +747,7 @@ private static IEnumerable GetSortedProperties(IEntityType entityType var properties = GetSortedProperties(definingForeignKey.DeclaringEntityType).ToList(); if (clrProperty == null) { - shadowProperties.AddRange(properties); + leastPriorityProperties.AddRange(properties); continue; } @@ -792,9 +793,9 @@ private static IEnumerable GetSortedProperties(IEntityType entityType return sortedPropertyInfos .Select(pi => primaryKeyPropertyGroups.ContainsKey(pi) ? primaryKeyPropertyGroups[pi] : null) .Where(e => e != null) - .Concat(shadowPrimaryKeyProperties) + .Concat(leastPriorityPrimaryKeyProperties) .Concat(sortedPropertyInfos.Where(pi => !primaryKeyPropertyGroups.ContainsKey(pi)).SelectMany(p => groups[p])) - .Concat(shadowProperties) + .Concat(leastPriorityProperties) .Concat(entityType.GetDirectlyDerivedTypes().SelectMany(GetSortedProperties)); } diff --git a/src/EFCore/Metadata/Builders/EntityTypeBuilder.cs b/src/EFCore/Metadata/Builders/EntityTypeBuilder.cs index facbda7f1d3..9ec73c36829 100644 --- a/src/EFCore/Metadata/Builders/EntityTypeBuilder.cs +++ b/src/EFCore/Metadata/Builders/EntityTypeBuilder.cs @@ -185,6 +185,11 @@ public virtual PropertyBuilder Property([NotNull] Type propertyType, [NotNull] s /// Returns an object that can be used to configure a property of the entity type. /// If no property with the given name exists, then a new property will be added. /// + /// + /// Indexed properties are stored in the entity using + /// an indexer + /// supplying the provided property name. + /// /// /// The type of the property to be configured. /// The name of the property to be configured. @@ -201,7 +206,9 @@ public virtual PropertyBuilder IndexedProperty([NotNull] s /// If no property with the given name exists, then a new property will be added. /// /// - /// Indexed properties are stored in the entity using an indexer supplying the provided property name. + /// Indexed properties are stored in the entity using + /// an indexer + /// supplying the provided property name. /// /// /// The type of the property to be configured. diff --git a/src/EFCore/Metadata/Builders/OwnedNavigationBuilder.cs b/src/EFCore/Metadata/Builders/OwnedNavigationBuilder.cs index 32eb9a4f007..b44240263ed 100644 --- a/src/EFCore/Metadata/Builders/OwnedNavigationBuilder.cs +++ b/src/EFCore/Metadata/Builders/OwnedNavigationBuilder.cs @@ -194,6 +194,46 @@ public virtual PropertyBuilder Property([NotNull] Type propertyType, [NotNull] s Check.NotNull(propertyType, nameof(propertyType)), Check.NotEmpty(propertyName, nameof(propertyName)), ConfigurationSource.Explicit).Metadata); + /// + /// + /// Returns an object that can be used to configure a property of the entity type. + /// If no property with the given name exists, then a new property will be added. + /// + /// + /// Indexed properties are stored in the entity using + /// an indexer + /// supplying the provided property name. + /// + /// + /// The type of the property to be configured. + /// The name of the property to be configured. + /// An object that can be used to configure the property. + public virtual PropertyBuilder IndexedProperty([NotNull] string propertyName) + => new PropertyBuilder( + DependentEntityType.Builder.IndexedProperty( + typeof(TProperty), + Check.NotEmpty(propertyName, nameof(propertyName)), ConfigurationSource.Explicit).Metadata); + + /// + /// + /// Returns an object that can be used to configure a property of the entity type. + /// If no property with the given name exists, then a new property will be added. + /// + /// + /// Indexed properties are stored in the entity using + /// an indexer + /// supplying the provided property name. + /// + /// + /// The type of the property to be configured. + /// The name of the property to be configured. + /// An object that can be used to configure the property. + public virtual PropertyBuilder IndexedProperty([NotNull] Type propertyType, [NotNull] string propertyName) + => new PropertyBuilder( + DependentEntityType.Builder.IndexedProperty( + Check.NotNull(propertyType, nameof(propertyType)), + Check.NotEmpty(propertyName, nameof(propertyName)), ConfigurationSource.Explicit).Metadata); + /// /// Excludes the given property from the entity type. This method is typically used to remove properties /// or navigations from the owned entity type that were added by convention. diff --git a/src/EFCore/Metadata/Internal/EntityType.cs b/src/EFCore/Metadata/Internal/EntityType.cs index 1f2b2ac3af2..5877cfe3e1f 100644 --- a/src/EFCore/Metadata/Internal/EntityType.cs +++ b/src/EFCore/Metadata/Internal/EntityType.cs @@ -2612,40 +2612,86 @@ public virtual IEnumerable> GetSeedData(bool provide var seed = new Dictionary(StringComparer.Ordinal); data.Add(seed); var type = rawSeed.GetType(); - foreach (var memberInfo in type.GetMembersInHierarchy()) + + if (type == ClrType) { - if (!properties.TryGetValue(memberInfo.GetSimpleMemberName(), out var propertyBase)) + // non-anonymous type + foreach (var propertyBase in properties.Values) { - continue; - } + ValueConverter valueConverter = null; + if (providerValues + && !valueConverters.TryGetValue(propertyBase.Name, out valueConverter)) + { + if (propertyBase is IProperty property) + { + valueConverter = property.FindTypeMapping()?.Converter + ?? property.GetValueConverter(); + } - ValueConverter valueConverter = null; - if (providerValues - && !valueConverters.TryGetValue(memberInfo.Name, out valueConverter)) - { - if (propertyBase is IProperty property) + valueConverters[propertyBase.Name] = valueConverter; + } + + object value = null; + switch (propertyBase.GetIdentifyingMemberInfo()) { - valueConverter = property.FindTypeMapping()?.Converter - ?? property.GetValueConverter(); + case PropertyInfo propertyInfo: + if (propertyBase.IsIndexerProperty()) + { + try + { + value = propertyInfo.GetValue(rawSeed, new[] { propertyBase.Name }); + } + catch (Exception) + { + // Swallow if the property value is not set on the seed data + } + } + else + { + value = propertyInfo.GetValue(rawSeed); + } + + break; + case FieldInfo fieldInfo: + value = fieldInfo.GetValue(rawSeed); + break; } - valueConverters[memberInfo.Name] = valueConverter; + seed[propertyBase.Name] = valueConverter == null + ? value + : valueConverter.ConvertToProvider(value); } - - object value = null; - switch (memberInfo) + } + else + { + // anonymous type + foreach (var memberInfo in type.GetMembersInHierarchy()) { - case PropertyInfo propertyInfo: - value = propertyInfo.GetValue(rawSeed); - break; - case FieldInfo fieldInfo: - value = fieldInfo.GetValue(rawSeed); - break; - } + if (!properties.TryGetValue(memberInfo.GetSimpleMemberName(), out var propertyBase)) + { + continue; + } + + ValueConverter valueConverter = null; + if (providerValues + && !valueConverters.TryGetValue(propertyBase.Name, out valueConverter)) + { + if (propertyBase is IProperty property) + { + valueConverter = property.FindTypeMapping()?.Converter + ?? property.GetValueConverter(); + } - seed[memberInfo.Name] = valueConverter == null - ? value - : valueConverter.ConvertToProvider(value); + valueConverters[propertyBase.Name] = valueConverter; + } + + // All memberInfos are PropertyInfo in anonymous type + var value = ((PropertyInfo)memberInfo).GetValue(rawSeed); + + seed[propertyBase.Name] = valueConverter == null + ? value + : valueConverter.ConvertToProvider(value); + } } } @@ -2865,7 +2911,8 @@ IConventionEntityTypeBuilder IConventionEntityType.Builder /// IModel ITypeBase.Model { - [DebuggerStepThrough] get => Model; + [DebuggerStepThrough] + get => Model; } /// @@ -2876,7 +2923,8 @@ IModel ITypeBase.Model /// IMutableModel IMutableTypeBase.Model { - [DebuggerStepThrough] get => Model; + [DebuggerStepThrough] + get => Model; } /// @@ -2887,7 +2935,8 @@ IMutableModel IMutableTypeBase.Model /// IMutableModel IMutableEntityType.Model { - [DebuggerStepThrough] get => Model; + [DebuggerStepThrough] + get => Model; } /// @@ -2910,7 +2959,8 @@ IConventionModel IConventionEntityType.Model /// IEntityType IEntityType.BaseType { - [DebuggerStepThrough] get => _baseType; + [DebuggerStepThrough] + get => _baseType; } /// @@ -2945,7 +2995,8 @@ IConventionEntityType IConventionEntityType.BaseType /// IEntityType IEntityType.DefiningEntityType { - [DebuggerStepThrough] get => DefiningEntityType; + [DebuggerStepThrough] + get => DefiningEntityType; } /// @@ -2956,7 +3007,8 @@ IEntityType IEntityType.DefiningEntityType /// IMutableEntityType IMutableEntityType.DefiningEntityType { - [DebuggerStepThrough] get => DefiningEntityType; + [DebuggerStepThrough] + get => DefiningEntityType; } /// @@ -2967,7 +3019,8 @@ IMutableEntityType IMutableEntityType.DefiningEntityType /// IConventionEntityType IConventionEntityType.DefiningEntityType { - [DebuggerStepThrough] get => DefiningEntityType; + [DebuggerStepThrough] + get => DefiningEntityType; } /// diff --git a/src/EFCore/Metadata/Internal/InternalPropertyBuilder.cs b/src/EFCore/Metadata/Internal/InternalPropertyBuilder.cs index 8baa3ba338b..5acecedbf48 100644 --- a/src/EFCore/Metadata/Internal/InternalPropertyBuilder.cs +++ b/src/EFCore/Metadata/Internal/InternalPropertyBuilder.cs @@ -584,10 +584,14 @@ public virtual InternalPropertyBuilder Attach([NotNull] InternalEntityTypeBuilde } else { - newPropertyBuilder = Metadata.GetIdentifyingMemberInfo() == null + var identifyingMemberInfo = Metadata.GetIdentifyingMemberInfo(); + + newPropertyBuilder = identifyingMemberInfo == null ? entityTypeBuilder.Property( Metadata.ClrType, Metadata.Name, Metadata.GetTypeConfigurationSource(), configurationSource) - : entityTypeBuilder.Property(Metadata.GetIdentifyingMemberInfo(), configurationSource); + : (identifyingMemberInfo as PropertyInfo)?.IsIndexerProperty() == true + ? entityTypeBuilder.IndexedProperty(Metadata.ClrType, Metadata.Name, configurationSource) + : entityTypeBuilder.Property(identifyingMemberInfo, configurationSource); } if (newProperty == Metadata) @@ -658,7 +662,8 @@ public virtual InternalPropertyBuilder Attach([NotNull] InternalEntityTypeBuilde /// IConventionProperty IConventionPropertyBuilder.Metadata { - [DebuggerStepThrough] get => Metadata; + [DebuggerStepThrough] + get => Metadata; } /// diff --git a/test/EFCore.Cosmos.FunctionalTests/Query/OwnedQueryCosmosTest.cs b/test/EFCore.Cosmos.FunctionalTests/Query/OwnedQueryCosmosTest.cs index 386521fb0fd..0acd2effebe 100644 --- a/test/EFCore.Cosmos.FunctionalTests/Query/OwnedQueryCosmosTest.cs +++ b/test/EFCore.Cosmos.FunctionalTests/Query/OwnedQueryCosmosTest.cs @@ -278,6 +278,179 @@ public override Task Where_collection_navigation_ToArray_Length_member(bool asyn return base.Where_collection_navigation_ToArray_Length_member(async); } + public override async Task Can_query_on_indexer_properties(bool async) + { + await base.Can_query_on_indexer_properties(async); + + AssertSql( + @"SELECT c +FROM root c +WHERE (c[""Discriminator""] IN (""OwnedPerson"", ""Branch"", ""LeafB"", ""LeafA"") AND (c[""Name""] = ""Mona Cy""))"); + } + + public override async Task Can_query_on_owned_indexer_properties(bool async) + { + await base.Can_query_on_owned_indexer_properties(async); + + AssertSql( + @"SELECT c[""Name""] +FROM root c +WHERE (c[""Discriminator""] IN (""OwnedPerson"", ""Branch"", ""LeafB"", ""LeafA"") AND (c[""PersonAddress""][""ZipCode""] = 38654))"); + } + + public override async Task Can_query_on_indexer_property_when_property_name_from_closure(bool async) + { + await base.Can_query_on_indexer_property_when_property_name_from_closure(async); + + AssertSql( + @"SELECT c[""Name""] +FROM root c +WHERE (c[""Discriminator""] IN (""OwnedPerson"", ""Branch"", ""LeafB"", ""LeafA"") AND (c[""Name""] = ""Mona Cy""))"); + } + + public override async Task Can_project_indexer_properties(bool async) + { + await base.Can_project_indexer_properties(async); + + AssertSql( + @"SELECT c[""Name""] +FROM root c +WHERE c[""Discriminator""] IN (""OwnedPerson"", ""Branch"", ""LeafB"", ""LeafA"")"); + } + + public override async Task Can_project_owned_indexer_properties(bool async) + { + await base.Can_project_owned_indexer_properties(async); + + AssertSql( + @"SELECT c[""PersonAddress""][""AddressLine""] +FROM root c +WHERE c[""Discriminator""] IN (""OwnedPerson"", ""Branch"", ""LeafB"", ""LeafA"")"); + } + + public override async Task Can_project_indexer_properties_converted(bool async) + { + await base.Can_project_indexer_properties_converted(async); + + AssertSql( + @"SELECT c[""Name""] +FROM root c +WHERE c[""Discriminator""] IN (""OwnedPerson"", ""Branch"", ""LeafB"", ""LeafA"")"); + } + + public override async Task Can_project_owned_indexer_properties_converted(bool async) + { + await base.Can_project_owned_indexer_properties_converted(async); + } + + [ConditionalTheory(Skip = "OrderBy requires composite index #17246")] + public override async Task Can_OrderBy_indexer_properties(bool async) + { + await base.Can_OrderBy_indexer_properties(async); + + AssertSql(" "); + } + + [ConditionalTheory(Skip = "OrderBy requires composite index #17246")] + public override async Task Can_OrderBy_indexer_properties_converted(bool async) + { + await base.Can_OrderBy_indexer_properties_converted(async); + + AssertSql(" "); + } + + [ConditionalTheory(Skip = "OrderBy requires composite index #17246")] + public override async Task Can_OrderBy_owned_indexer_properties(bool async) + { + await base.Can_OrderBy_owned_indexer_properties(async); + + AssertSql(" "); + } + + [ConditionalTheory(Skip = "OrderBy requires composite index #17246")] + public override async Task Can_OrderBy_owened_indexer_properties_converted(bool async) + { + await base.Can_OrderBy_owened_indexer_properties_converted(async); + + AssertSql(" "); + } + + [ConditionalTheory(Skip = "GroupBy #17246")] + public override async Task Can_group_by_indexer_property(bool isAsync) + { + await base.Can_group_by_indexer_property(isAsync); + + AssertSql(" "); + } + + [ConditionalTheory(Skip = "GroupBy #17246")] + public override async Task Can_group_by_converted_indexer_property(bool isAsync) + { + await base.Can_group_by_converted_indexer_property(isAsync); + + AssertSql(" "); + } + + [ConditionalTheory(Skip = "GroupBy #17246")] + public override async Task Can_group_by_owned_indexer_property(bool isAsync) + { + await base.Can_group_by_owned_indexer_property(isAsync); + + AssertSql(" "); + } + + [ConditionalTheory(Skip = "GroupBy #17246")] + public override async Task Can_group_by_converted_owned_indexer_property(bool isAsync) + { + await base.Can_group_by_converted_owned_indexer_property(isAsync); + + AssertSql(" "); + } + + [ConditionalTheory(Skip = "Join #17246")] + public override async Task Can_join_on_indexer_property_on_query(bool isAsync) + { + await base.Can_join_on_indexer_property_on_query(isAsync); + + AssertSql(" "); + } + + public override async Task Projecting_indexer_property_ignores_include(bool isAsync) + { + await base.Projecting_indexer_property_ignores_include(isAsync); + + AssertSql( + @"SELECT c[""PersonAddress""][""ZipCode""] AS Nation +FROM root c +WHERE c[""Discriminator""] IN (""OwnedPerson"", ""Branch"", ""LeafB"", ""LeafA"")"); + } + + public override async Task Projecting_indexer_property_ignores_include_converted(bool isAsync) + { + await base.Projecting_indexer_property_ignores_include_converted(isAsync); + + AssertSql( + @"SELECT c[""PersonAddress""][""ZipCode""] AS Nation +FROM root c +WHERE c[""Discriminator""] IN (""OwnedPerson"", ""Branch"", ""LeafB"", ""LeafA"")"); + } + + [ConditionalTheory(Skip = "Subquery #17246")] + public override async Task Indexer_property_is_pushdown_into_subquery(bool isAsync) + { + await base.Indexer_property_is_pushdown_into_subquery(isAsync); + + AssertSql(" "); + } + + [ConditionalTheory(Skip = "Composition over owned collection #17246")] + public override async Task Can_query_indexer_property_on_owned_collection(bool isAsync) + { + await base.Can_query_indexer_property_on_owned_collection(isAsync); + + AssertSql(" "); + } + private void AssertSql(params string[] expected) => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); @@ -296,15 +469,20 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con modelBuilder.Entity( eb => { + eb.IndexedProperty("Name"); eb.HasData( - new { Id = 1, id = Guid.NewGuid().ToString() }); + new { Id = 1, id = Guid.NewGuid().ToString(), Name = "Mona Cy" }); eb.OwnsOne( p => p.PersonAddress, ab => { + ab.IndexedProperty("AddressLine"); + ab.IndexedProperty(typeof(int), "ZipCode"); ab.HasData( - new { OwnedPersonId = 1 }, new { OwnedPersonId = 2 }, new { OwnedPersonId = 3 }, - new { OwnedPersonId = 4 }); + new { OwnedPersonId = 1, AddressLine = "804 S. Lakeshore Road", ZipCode = 38654 }, + new { OwnedPersonId = 2, AddressLine = "7 Church Dr.", ZipCode = 28655 }, + new { OwnedPersonId = 3, AddressLine = "72 Hickory Rd.", ZipCode = 07728 }, + new { OwnedPersonId = 4, AddressLine = "28 Strawberry St.", ZipCode = 19053 }); ab.OwnsOne( a => a.Country, cb => @@ -344,12 +522,13 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con p => p.Orders, ob => { ob.HasKey(o => o.Id); + ob.IndexedProperty("OrderDate"); ob.HasData( - new { Id = -10, ClientId = 1 }, - new { Id = -11, ClientId = 1 }, - new { Id = -20, ClientId = 2 }, - new { Id = -30, ClientId = 3 }, - new { Id = -40, ClientId = 4 } + new { Id = -10, ClientId = 1, OrderDate = Convert.ToDateTime("2018-07-11 10:01:41") }, + new { Id = -11, ClientId = 1, OrderDate = Convert.ToDateTime("2015-03-03 04:37:59") }, + new { Id = -20, ClientId = 2, OrderDate = Convert.ToDateTime("2015-05-25 20:35:48") }, + new { Id = -30, ClientId = 3, OrderDate = Convert.ToDateTime("2014-11-10 04:32:42") }, + new { Id = -40, ClientId = 4, OrderDate = Convert.ToDateTime("2016-04-25 19:23:56") } ); }); }); @@ -358,7 +537,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con eb => { eb.HasData( - new { Id = 2, id = Guid.NewGuid().ToString() }); + new { Id = 2, id = Guid.NewGuid().ToString(), Name = "Antigonus Mitul" }); eb.OwnsOne( p => p.BranchAddress, ab => @@ -390,7 +569,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con eb => { eb.HasData( - new { Id = 3, id = Guid.NewGuid().ToString() }); + new { Id = 3, id = Guid.NewGuid().ToString(), Name = "Madalena Morana" }); eb.OwnsOne( p => p.LeafAAddress, ab => @@ -416,7 +595,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con eb => { eb.HasData( - new { Id = 4, id = Guid.NewGuid().ToString() }); + new { Id = 4, id = Guid.NewGuid().ToString(), Name = "Vanda Waldemar" }); eb.OwnsOne( p => p.LeafBAddress, ab => diff --git a/test/EFCore.Specification.Tests/Query/GearsOfWarQueryFixtureBase.cs b/test/EFCore.Specification.Tests/Query/GearsOfWarQueryFixtureBase.cs index 4e57202e07e..e0f59787cce 100644 --- a/test/EFCore.Specification.Tests/Query/GearsOfWarQueryFixtureBase.cs +++ b/test/EFCore.Specification.Tests/Query/GearsOfWarQueryFixtureBase.cs @@ -47,7 +47,7 @@ protected GearsOfWarQueryFixtureBase() Assert.Equal(ee.Name, aa.Name); Assert.Equal(ee.Location, aa.Location); - Assert.Equal(ee["Nation"], aa["Nation"]); + Assert.Equal(ee.Nation, aa.Nation); } } }, @@ -285,7 +285,6 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con b => { b.HasKey(c => c.Name); - b.IndexedProperty("Nation"); }); modelBuilder.Entity( diff --git a/test/EFCore.Specification.Tests/Query/GearsOfWarQueryTestBase.cs b/test/EFCore.Specification.Tests/Query/GearsOfWarQueryTestBase.cs index 8169d0b821e..45a1d9cd1be 100644 --- a/test/EFCore.Specification.Tests/Query/GearsOfWarQueryTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/GearsOfWarQueryTestBase.cs @@ -7431,94 +7431,6 @@ public virtual Task DateTimeOffset_Date_returns_datetime(bool async) ss => ss.Set().Where(m => m.Timeline.Date >= dateTimeOffset.Date)); } - [ConditionalTheory] - [MemberData(nameof(IsAsyncData))] - public virtual Task Can_query_on_indexed_properties(bool async) - { - return AssertQuery( - async, - ss => ss.Set().Where(c => (string)c["Nation"] == "Tyrus")); - } - - [ConditionalTheory] - [MemberData(nameof(IsAsyncData))] - public virtual Task Can_query_on_indexed_property_when_property_name_from_closure(bool async) - { - var propertyName = "Nation"; - return AssertQuery( - async, - ss => ss.Set().Where(c => (string)c[propertyName] == "Tyrus")); - } - - [ConditionalTheory] - [MemberData(nameof(IsAsyncData))] - public virtual Task Can_project_indexed_properties(bool async) - { - return AssertQuery( - async, - ss => ss.Set().Select(c => (string)c["Nation"])); - } - - [ConditionalTheory] - [MemberData(nameof(IsAsyncData))] - public virtual Task Can_OrderBy_indexed_properties(bool async) - { - return AssertQuery( - async, - ss => ss.Set().Where(c => (string)c["Nation"] != null).OrderBy(c => (string)c["Nation"]).ThenBy(c => c.Name), - assertOrder: true); - } - - [ConditionalTheory] - [MemberData(nameof(IsAsyncData))] - public virtual Task Can_group_by_indexed_property_on_query(bool async) - { - return AssertQueryScalar( - async, - ss => ss.Set().GroupBy(c => c["Nation"]).Select(g => g.Count())); - } - - [ConditionalTheory] - [MemberData(nameof(IsAsyncData))] - public virtual Task Can_group_by_converted_indexed_property_on_query(bool async) - { - return AssertQueryScalar( - async, - ss => ss.Set().GroupBy(c => (string)c["Nation"]).Select(g => g.Count())); - } - - [ConditionalTheory] - [MemberData(nameof(IsAsyncData))] - public virtual Task Can_join_on_indexed_property_on_query(bool async) - { - return AssertQuery( - async, - ss => - (from c1 in ss.Set() - join c2 in ss.Set() - on c1["Nation"] equals c2["Nation"] - select new { c1.Name, c2.Location })); - } - - [ConditionalTheory] - [MemberData(nameof(IsAsyncData))] - public virtual Task Projecting_index_property_ignores_include(bool async) - { - return AssertQuery( - async, - ss => from c in ss.Set().Include(c => c.BornGears).AsTracking() - select new { Nation = c["Nation"] }); - } - - [ConditionalTheory] - [MemberData(nameof(IsAsyncData))] - public virtual Task Indexer_property_is_pushdown_into_subquery(bool async) - { - return AssertQuery( - async, - ss => ss.Set().Where(g => ss.Set().Where(c => c.Name == g.CityOfBirthName).FirstOrDefault()["Nation"] == null)); - } - [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Conditional_with_conditions_evaluating_to_false_gets_optimized(bool async) diff --git a/test/EFCore.Specification.Tests/Query/OwnedQueryTestBase.cs b/test/EFCore.Specification.Tests/Query/OwnedQueryTestBase.cs index 31c1ba69242..c7728b33983 100644 --- a/test/EFCore.Specification.Tests/Query/OwnedQueryTestBase.cs +++ b/test/EFCore.Specification.Tests/Query/OwnedQueryTestBase.cs @@ -476,6 +476,8 @@ public virtual Task Client_method_skip_take_loads_owned_navigations_variation_2( ss => ss.Set().OrderBy(e => e.Id).Select(e => Identity(e)).Skip(1).Take(2)); } + private static OwnedPerson Identity(OwnedPerson person) => person; + [ConditionalTheory] [MemberData(nameof(IsAsyncData))] public virtual Task Where_owned_collection_navigation_ToList_Count(bool async) @@ -546,7 +548,199 @@ public virtual Task Where_collection_navigation_ToArray_Length_member(bool async elementAsserter: (e, a) => AssertCollection(e, a)); } - private static OwnedPerson Identity(OwnedPerson person) => person; + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Can_query_on_indexer_properties(bool async) + { + return AssertQuery( + async, + ss => ss.Set().Where(c => (string)c["Name"] == "Mona Cy")); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Can_query_on_owned_indexer_properties(bool async) + { + return AssertQuery( + async, + ss => ss.Set().Where(c => (int)c.PersonAddress["ZipCode"] == 38654).Select(c => (string)c["Name"])); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Can_query_on_indexer_property_when_property_name_from_closure(bool async) + { + var propertyName = "Name"; + return AssertQuery( + async, + ss => ss.Set().Where(c => (string)c[propertyName] == "Mona Cy").Select(c => (string)c["Name"])); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Can_project_indexer_properties(bool async) + { + return AssertQuery( + async, + ss => ss.Set().Select(c => c["Name"])); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Can_project_owned_indexer_properties(bool async) + { + return AssertQuery( + async, + ss => ss.Set().Select(c => c.PersonAddress["AddressLine"])); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Can_project_indexer_properties_converted(bool async) + { + return AssertQuery( + async, + ss => ss.Set().Select(c => (string)c["Name"])); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Can_project_owned_indexer_properties_converted(bool async) + { + return AssertQuery( + async, + ss => ss.Set().Select(c => (string)c.PersonAddress["AddressLine"])); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Can_OrderBy_indexer_properties(bool async) + { + return AssertQuery( + async, + ss => ss.Set().OrderBy(c => c["Name"]).ThenBy(c => c.Id), + assertOrder: true); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Can_OrderBy_indexer_properties_converted(bool async) + { + return AssertQuery( + async, + ss => ss.Set().OrderBy(c => (string)c["Name"]).ThenBy(c => c.Id).Select(c => (string)c["Name"]), + assertOrder: true); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Can_OrderBy_owned_indexer_properties(bool async) + { + return AssertQuery( + async, + ss => ss.Set().OrderBy(c => c.PersonAddress["ZipCode"]).ThenBy(c => c.Id).Select(c => (string)c["Name"]), + assertOrder: true); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Can_OrderBy_owened_indexer_properties_converted(bool async) + { + return AssertQuery( + async, + ss => ss.Set().OrderBy(c => (int)c.PersonAddress["ZipCode"]).ThenBy(c => c.Id).Select(c => (string)c["Name"]), + assertOrder: true); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Can_group_by_indexer_property(bool isAsync) + { + return AssertQueryScalar( + isAsync, + ss => ss.Set().GroupBy(c => c["Name"]).Select(g => g.Count())); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Can_group_by_converted_indexer_property(bool isAsync) + { + return AssertQueryScalar( + isAsync, + ss => ss.Set().GroupBy(c => (string)c["Name"]).Select(g => g.Count())); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Can_group_by_owned_indexer_property(bool isAsync) + { + return AssertQueryScalar( + isAsync, + ss => ss.Set().GroupBy(c => c.PersonAddress["ZipCode"]).Select(g => g.Count())); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Can_group_by_converted_owned_indexer_property(bool isAsync) + { + return AssertQueryScalar( + isAsync, + ss => ss.Set().GroupBy(c => (int)c.PersonAddress["ZipCode"]).Select(g => g.Count())); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Can_join_on_indexer_property_on_query(bool isAsync) + { + return AssertQuery( + isAsync, + ss => + (from c1 in ss.Set() + join c2 in ss.Set() + on c1.PersonAddress["ZipCode"] equals c2.PersonAddress["ZipCode"] + select new { c1.Id, c2.PersonAddress.Country.Name })); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Projecting_indexer_property_ignores_include(bool isAsync) + { + return AssertQuery( + isAsync, + ss => from c in ss.Set().AsTracking() + select new { Nation = c.PersonAddress["ZipCode"] }); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Projecting_indexer_property_ignores_include_converted(bool isAsync) + { + return AssertQuery( + isAsync, + ss => from c in ss.Set().AsTracking() + select new { Nation = (int)c.PersonAddress["ZipCode"] }); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Indexer_property_is_pushdown_into_subquery(bool isAsync) + { + return AssertQuery( + isAsync, + ss => ss.Set() + .Where(g => (string)ss.Set().Where(c => c.Id == g.Id).FirstOrDefault()["Name"] == "Mona Cy") + .Select(c => (string)c["Name"])); + } + + [ConditionalTheory] + [MemberData(nameof(IsAsyncData))] + public virtual Task Can_query_indexer_property_on_owned_collection(bool isAsync) + { + return AssertQuery( + isAsync, + ss => ss.Set().Where(ow => ow.Orders.Where(o => ((DateTime)o["OrderDate"]).Year == 2018).Count() == 1) + .Select(c => (string)c["Name"])); + } protected virtual DbContext CreateContext() => Fixture.CreateContext(); @@ -554,6 +748,8 @@ public abstract class OwnedQueryFixtureBase : SharedStoreFixtureBase expectedOrders, ICollection< foreach (var element in expectedOrders.OrderBy(ee => ee.Id).Zip(actualOrders.OrderBy(aa => aa.Id), (e, a) => new { e, a })) { Assert.Equal(element.e.Id, element.a.Id); + Assert.Equal(element.e["OrderDate"], element.a["OrderDate"]); Assert.Equal(element.e.Client.Id, element.a.Client.Id); } } @@ -603,6 +800,7 @@ public OwnedQueryFixtureBase() var aa = (OwnedPerson)a; Assert.Equal(ee.Id, aa.Id); + Assert.Equal(ee["Name"], aa["Name"]); AssertAddress(ee.PersonAddress, aa.PersonAddress); AssertOrders(ee.Orders, aa.Orders); } @@ -833,15 +1031,21 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con modelBuilder.Entity( eb => { - eb.HasData( - new OwnedPerson { Id = 1 }); + eb.IndexedProperty("Name"); + var ownedPerson = new OwnedPerson { Id = 1 }; + ownedPerson["Name"] = "Mona Cy"; + eb.HasData(ownedPerson); eb.OwnsOne( p => p.PersonAddress, ab => { + ab.IndexedProperty("AddressLine"); + ab.IndexedProperty(typeof(int), "ZipCode"); ab.HasData( - new { OwnedPersonId = 1 }, new { OwnedPersonId = 2 }, new { OwnedPersonId = 3 }, - new { OwnedPersonId = 4 }); + new { OwnedPersonId = 1, AddressLine = "804 S. Lakeshore Road", ZipCode = 38654 }, + new { OwnedPersonId = 2, AddressLine = "7 Church Dr.", ZipCode = 28655 }, + new { OwnedPersonId = 3, AddressLine = "72 Hickory Rd.", ZipCode = 07728 }, + new { OwnedPersonId = 4, AddressLine = "28 Strawberry St.", ZipCode = 19053 }); ab.OwnsOne( a => a.Country, cb => @@ -880,12 +1084,13 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con eb.OwnsMany( p => p.Orders, ob => { + ob.IndexedProperty("OrderDate"); ob.HasData( - new { Id = -10, ClientId = 1 }, - new { Id = -11, ClientId = 1 }, - new { Id = -20, ClientId = 2 }, - new { Id = -30, ClientId = 3 }, - new { Id = -40, ClientId = 4 } + new { Id = -10, ClientId = 1, OrderDate = Convert.ToDateTime("2018-07-11 10:01:41") }, + new { Id = -11, ClientId = 1, OrderDate = Convert.ToDateTime("2015-03-03 04:37:59") }, + new { Id = -20, ClientId = 2, OrderDate = Convert.ToDateTime("2015-05-25 20:35:48") }, + new { Id = -30, ClientId = 3, OrderDate = Convert.ToDateTime("2014-11-10 04:32:42") }, + new { Id = -40, ClientId = 4, OrderDate = Convert.ToDateTime("2016-04-25 19:23:56") } ); }); }); @@ -893,8 +1098,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con modelBuilder.Entity( eb => { - eb.HasData( - new Branch { Id = 2 }); + eb.HasData(new { Id = 2, Name = "Antigonus Mitul" }); eb.OwnsOne( p => p.BranchAddress, ab => @@ -925,8 +1129,9 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con modelBuilder.Entity( eb => { - eb.HasData( - new LeafA { Id = 3 }); + var leafA = new LeafA { Id = 3 }; + leafA["Name"] = "Madalena Morana"; + eb.HasData(leafA); eb.OwnsOne( p => p.LeafAAddress, ab => @@ -954,8 +1159,9 @@ protected override void OnModelCreating(ModelBuilder modelBuilder, DbContext con modelBuilder.Entity( eb => { - eb.HasData( - new LeafB { Id = 4 }); + var leafB = new LeafB { Id = 4 }; + leafB["Name"] = "Vanda Waldemar"; + eb.HasData(leafB); eb.OwnsOne( p => p.LeafBAddress, ab => @@ -1040,7 +1246,7 @@ public override PoolableDbContext CreateContext() } } - public class OwnedQueryData : ISetSource + protected class OwnedQueryData : ISetSource { private readonly IReadOnlyList _ownedPeople; private readonly IReadOnlyList _planets; @@ -1148,40 +1354,67 @@ private static IReadOnlyList CreateMoons() private static IReadOnlyList CreateOwnedPeople() { + var personAddress1 = new OwnedAddress { Country = new OwnedCountry { Name = "USA", PlanetId = 1 } }; + personAddress1["AddressLine"] = "804 S. Lakeshore Road"; + personAddress1["ZipCode"] = 38654; var ownedPerson1 = new OwnedPerson { - Id = 1, PersonAddress = new OwnedAddress { Country = new OwnedCountry { Name = "USA", PlanetId = 1 } } + Id = 1, + PersonAddress = personAddress1 }; + ownedPerson1["Name"] = "Mona Cy"; + var personAddress2 = new OwnedAddress { Country = new OwnedCountry { Name = "USA", PlanetId = 1 } }; + personAddress2["AddressLine"] = "7 Church Dr."; + personAddress2["ZipCode"] = 28655; var ownedPerson2 = new Branch { Id = 2, - PersonAddress = new OwnedAddress { Country = new OwnedCountry { Name = "USA", PlanetId = 1 } }, + PersonAddress = personAddress2, BranchAddress = new OwnedAddress { Country = new OwnedCountry { Name = "Canada", PlanetId = 1 } } }; + ownedPerson2["Name"] = "Antigonus Mitul"; + var personAddress3 = new OwnedAddress { Country = new OwnedCountry { Name = "USA", PlanetId = 1 } }; + personAddress3["AddressLine"] = "72 Hickory Rd."; + personAddress3["ZipCode"] = 07728; var ownedPerson3 = new LeafA { Id = 3, - PersonAddress = new OwnedAddress { Country = new OwnedCountry { Name = "USA", PlanetId = 1 } }, + PersonAddress = personAddress3, BranchAddress = new OwnedAddress { Country = new OwnedCountry { Name = "Canada", PlanetId = 1 } }, LeafAAddress = new OwnedAddress { Country = new OwnedCountry { Name = "Mexico", PlanetId = 1 } } }; + ownedPerson3["Name"] = "Madalena Morana"; + var personAddress4 = new OwnedAddress { Country = new OwnedCountry { Name = "USA", PlanetId = 1 } }; + personAddress4["AddressLine"] = "28 Strawberry St."; + personAddress4["ZipCode"] = 19053; var ownedPerson4 = new LeafB { Id = 4, - PersonAddress = new OwnedAddress { Country = new OwnedCountry { Name = "USA", PlanetId = 1 } }, + PersonAddress = personAddress4, LeafBAddress = new OwnedAddress { Country = new OwnedCountry { Name = "Panama", PlanetId = 1 } } }; + ownedPerson4["Name"] = "Vanda Waldemar"; - ownedPerson1.Orders = new List - { - new Order { Id = -11, Client = ownedPerson1 }, new Order { Id = -10, Client = ownedPerson1 } - }; - ownedPerson2.Orders = new List { new Order { Id = -20, Client = ownedPerson2 } }; - ownedPerson3.Orders = new List { new Order { Id = -30, Client = ownedPerson3 } }; - ownedPerson4.Orders = new List { new Order { Id = -40, Client = ownedPerson4 } }; + var order1 = new Order { Id = -10, Client = ownedPerson1 }; + order1["OrderDate"] = Convert.ToDateTime("2018-07-11 10:01:41"); + var order2 = new Order { Id = -11, Client = ownedPerson1 }; + order2["OrderDate"] = Convert.ToDateTime("2015-03-03 04:37:59"); + ownedPerson1.Orders = new List { order1, order2 }; + + var order3 = new Order { Id = -20, Client = ownedPerson2 }; + order3["OrderDate"] = Convert.ToDateTime("2015-05-25 20:35:48"); + ownedPerson2.Orders = new List { order3 }; + + var order4 = new Order { Id = -30, Client = ownedPerson3 }; + order4["OrderDate"] = Convert.ToDateTime("2014-11-10 04:32:42"); + ownedPerson3.Orders = new List { order4 }; + + var order5 = new Order { Id = -40, Client = ownedPerson4 }; + order5["OrderDate"] = Convert.ToDateTime("2016-04-25 19:23:56"); + ownedPerson4.Orders = new List { order5 }; return new List { @@ -1239,7 +1472,42 @@ private static void WireUp( protected class OwnedAddress { + private string _addressLine; + private int _zipCode; public OwnedCountry Country { get; set; } + public object this[string name] + { + get + { + if (string.Equals(name, "AddressLine", StringComparison.Ordinal)) + { + return _addressLine; + } + + if (string.Equals(name, "ZipCode", StringComparison.Ordinal)) + { + return _zipCode; + } + + throw new InvalidOperationException($"Indexer property with key {name} is not defined on {nameof(OwnedPerson)}."); + } + + set + { + if (string.Equals(name, "AddressLine", StringComparison.Ordinal)) + { + _addressLine = (string)value; + } + else if (string.Equals(name, "ZipCode", StringComparison.Ordinal)) + { + _zipCode = (int)value; + } + else + { + throw new InvalidOperationException($"Indexer property with key {name} is not defined on {nameof(OwnedPerson)}."); + } + } + } } protected class OwnedCountry @@ -1252,7 +1520,35 @@ protected class OwnedCountry protected class OwnedPerson { + private string _name; + public int Id { get; set; } + + public object this[string name] + { + get + { + if (string.Equals(name, "Name", StringComparison.Ordinal)) + { + return _name; + } + + throw new InvalidOperationException($"Indexer property with key {name} is not defined on {nameof(OwnedPerson)}."); + } + + set + { + if (string.Equals(name, "Name", StringComparison.Ordinal)) + { + _name = (string)value; + } + else + { + throw new InvalidOperationException($"Indexer property with key {name} is not defined on {nameof(OwnedPerson)}."); + } + } + } + public OwnedAddress PersonAddress { get; set; } public int ReadOnlyProperty => 10; @@ -1261,7 +1557,34 @@ protected class OwnedPerson protected class Order { + private DateTime _orderDate; public int Id { get; set; } + + public object this[string name] + { + get + { + if (string.Equals(name, "OrderDate", StringComparison.Ordinal)) + { + return _orderDate; + } + + throw new InvalidOperationException($"Indexer property with key {name} is not defined on {nameof(OwnedPerson)}."); + } + + set + { + if (string.Equals(name, "OrderDate", StringComparison.Ordinal)) + { + _orderDate = (DateTime)value; + } + else + { + throw new InvalidOperationException($"Indexer property with key {name} is not defined on {nameof(OwnedPerson)}."); + } + } + } + public OwnedPerson Client { get; set; } } diff --git a/test/EFCore.Specification.Tests/TestModels/GearsOfWarModel/City.cs b/test/EFCore.Specification.Tests/TestModels/GearsOfWarModel/City.cs index 5e18a9829c7..d5d90485113 100644 --- a/test/EFCore.Specification.Tests/TestModels/GearsOfWarModel/City.cs +++ b/test/EFCore.Specification.Tests/TestModels/GearsOfWarModel/City.cs @@ -1,41 +1,18 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -using System; using System.Collections.Generic; namespace Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel { public class City { - private string _nation; // non-integer key with not conventional name public string Name { get; set; } public string Location { get; set; } - public object this[string name] - { - get - { - if (!string.Equals(name, "Nation", StringComparison.Ordinal)) - { - throw new InvalidOperationException($"Indexed property with key {name} is not defined on {nameof(City)}."); - } - - return _nation; - } - - set - { - if (!string.Equals(name, "Nation", StringComparison.Ordinal)) - { - throw new InvalidOperationException($"Indexed property with key {name} is not defined on {nameof(City)}."); - } - - _nation = (string)value; - } - } + public string Nation { get; set; } public List BornGears { get; set; } public List StationedGears { get; set; } diff --git a/test/EFCore.Specification.Tests/TestModels/GearsOfWarModel/GearsOfWarData.cs b/test/EFCore.Specification.Tests/TestModels/GearsOfWarModel/GearsOfWarData.cs index be5ca187b94..5ccaa8dbc6a 100644 --- a/test/EFCore.Specification.Tests/TestModels/GearsOfWarModel/GearsOfWarData.cs +++ b/test/EFCore.Specification.Tests/TestModels/GearsOfWarModel/GearsOfWarData.cs @@ -151,15 +151,15 @@ public static IReadOnlyList CreateCities() { Location = "Jacinto's location", Name = "Jacinto", + Nation = "Tyrus" }; - jacinto["Nation"] = "Tyrus"; var ephyra = new City { Location = "Ephyra's location", Name = "Ephyra", + Nation = "Tyrus" }; - ephyra["Nation"] = "Tyrus"; var hanover = new City { Location = "Hanover's location", Name = "Hanover" }; diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs index 2f788812371..c46d0817f1c 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs @@ -7405,98 +7405,6 @@ FROM [Missions] AS [m] WHERE CONVERT(date, [m].[Timeline]) >= @__dateTimeOffset_Date_0"); } - public override async Task Can_query_on_indexed_properties(bool async) - { - await base.Can_query_on_indexed_properties(async); - - AssertSql( - @"SELECT [c].[Name], [c].[Location], [c].[Nation] -FROM [Cities] AS [c] -WHERE [c].[Nation] = N'Tyrus'"); - } - - public override async Task Can_query_on_indexed_property_when_property_name_from_closure(bool async) - { - await base.Can_query_on_indexed_property_when_property_name_from_closure(async); - - AssertSql( - @"SELECT [c].[Name], [c].[Location], [c].[Nation] -FROM [Cities] AS [c] -WHERE [c].[Nation] = N'Tyrus'"); - } - - public override async Task Can_project_indexed_properties(bool async) - { - await base.Can_project_indexed_properties(async); - - AssertSql( - @"SELECT [c].[Nation] -FROM [Cities] AS [c]"); - } - - public override async Task Can_OrderBy_indexed_properties(bool async) - { - await base.Can_OrderBy_indexed_properties(async); - - AssertSql( - @"SELECT [c].[Name], [c].[Location], [c].[Nation] -FROM [Cities] AS [c] -WHERE [c].[Nation] IS NOT NULL -ORDER BY [c].[Nation], [c].[Name]"); - } - - public override async Task Can_group_by_indexed_property_on_query(bool async) - { - await base.Can_group_by_indexed_property_on_query(async); - - AssertSql( - @"SELECT COUNT(*) -FROM [Cities] AS [c] -GROUP BY [c].[Nation]"); - } - - public override async Task Can_group_by_converted_indexed_property_on_query(bool async) - { - await base.Can_group_by_converted_indexed_property_on_query(async); - - AssertSql( - @"SELECT COUNT(*) -FROM [Cities] AS [c] -GROUP BY [c].[Nation]"); - } - - public override async Task Can_join_on_indexed_property_on_query(bool async) - { - await base.Can_join_on_indexed_property_on_query(async); - - AssertSql( - @"SELECT [c].[Name], [c0].[Location] -FROM [Cities] AS [c] -INNER JOIN [Cities] AS [c0] ON [c].[Nation] = [c0].[Nation]"); - } - - public override async Task Projecting_index_property_ignores_include(bool async) - { - await base.Projecting_index_property_ignores_include(async); - - AssertSql( - @"SELECT [c].[Nation] -FROM [Cities] AS [c]"); - } - - public override async Task Indexer_property_is_pushdown_into_subquery(bool async) - { - await base.Indexer_property_is_pushdown_into_subquery(async); - - AssertSql( - @"SELECT [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank] -FROM [Gears] AS [g] -WHERE [g].[Discriminator] IN (N'Gear', N'Officer') AND ( - SELECT TOP(1) [c].[Nation] - FROM [Cities] AS [c] - WHERE [c].[Name] = [g].[CityOfBirthName]) IS NULL"); - } - public override async Task Conditional_with_conditions_evaluating_to_false_gets_optimized(bool async) { await base.Conditional_with_conditions_evaluating_to_false_gets_optimized(async); diff --git a/test/EFCore.SqlServer.FunctionalTests/Query/OwnedQuerySqlServerTest.cs b/test/EFCore.SqlServer.FunctionalTests/Query/OwnedQuerySqlServerTest.cs index 0fc0173bf59..a2c234199fa 100644 --- a/test/EFCore.SqlServer.FunctionalTests/Query/OwnedQuerySqlServerTest.cs +++ b/test/EFCore.SqlServer.FunctionalTests/Query/OwnedQuerySqlServerTest.cs @@ -20,33 +20,35 @@ public override async Task Query_with_owned_entity_equality_operator(bool async) await base.Query_with_owned_entity_equality_operator(async); AssertSql( - @"SELECT [o].[Id], [o].[Discriminator], [t1].[Id], [t4].[Id], [t4].[PersonAddress_Country_Name], [t4].[PersonAddress_Country_PlanetId], [t6].[Id], [t9].[Id], [t9].[BranchAddress_Country_Name], [t9].[BranchAddress_Country_PlanetId], [t11].[Id], [t14].[Id], [t14].[LeafAAddress_Country_Name], [t14].[LeafAAddress_Country_PlanetId], [t].[Id], [o16].[ClientId], [o16].[Id] + @"SELECT [o].[Id], [o].[Discriminator], [o].[Name], [t1].[Id], [t1].[PersonAddress_AddressLine], [t1].[PersonAddress_ZipCode], [t4].[Id], [t4].[PersonAddress_Country_Name], [t4].[PersonAddress_Country_PlanetId], [t6].[Id], [t9].[Id], [t9].[BranchAddress_Country_Name], [t9].[BranchAddress_Country_PlanetId], [t11].[Id], [t14].[Id], [t14].[LeafAAddress_Country_Name], [t14].[LeafAAddress_Country_PlanetId], [t].[Id], [o16].[ClientId], [o16].[Id], [o16].[OrderDate] FROM [OwnedPerson] AS [o] CROSS JOIN ( - SELECT [o0].[Id], [o0].[Discriminator] + SELECT [o0].[Id], [o0].[Discriminator], [o0].[Name] FROM [OwnedPerson] AS [o0] WHERE [o0].[Discriminator] = N'LeafB' ) AS [t] LEFT JOIN ( - SELECT [o1].[Id], [t0].[Id] AS [Id0] + SELECT [o1].[Id], [o1].[PersonAddress_AddressLine], [o1].[PersonAddress_ZipCode], [t0].[Id] AS [Id0] FROM [OwnedPerson] AS [o1] INNER JOIN ( - SELECT [o2].[Id], [o2].[Discriminator] + SELECT [o2].[Id], [o2].[Discriminator], [o2].[Name] FROM [OwnedPerson] AS [o2] WHERE [o2].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t0] ON [o1].[Id] = [t0].[Id] + WHERE [o1].[PersonAddress_ZipCode] IS NOT NULL ) AS [t1] ON [o].[Id] = [t1].[Id] LEFT JOIN ( SELECT [o3].[Id], [o3].[PersonAddress_Country_Name], [o3].[PersonAddress_Country_PlanetId], [t3].[Id] AS [Id0], [t3].[Id0] AS [Id00] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [t2].[Id] AS [Id0] + SELECT [o4].[Id], [o4].[PersonAddress_AddressLine], [o4].[PersonAddress_ZipCode], [t2].[Id] AS [Id0] FROM [OwnedPerson] AS [o4] INNER JOIN ( - SELECT [o5].[Id], [o5].[Discriminator] + SELECT [o5].[Id], [o5].[Discriminator], [o5].[Name] FROM [OwnedPerson] AS [o5] WHERE [o5].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t2] ON [o4].[Id] = [t2].[Id] + WHERE [o4].[PersonAddress_ZipCode] IS NOT NULL ) AS [t3] ON [o3].[Id] = [t3].[Id] WHERE [o3].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t4] ON [t1].[Id] = [t4].[Id] @@ -54,7 +56,7 @@ LEFT JOIN ( SELECT [o6].[Id], [t5].[Id] AS [Id0] FROM [OwnedPerson] AS [o6] INNER JOIN ( - SELECT [o7].[Id], [o7].[Discriminator] + SELECT [o7].[Id], [o7].[Discriminator], [o7].[Name] FROM [OwnedPerson] AS [o7] WHERE [o7].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t5] ON [o6].[Id] = [t5].[Id] @@ -66,7 +68,7 @@ INNER JOIN ( SELECT [o9].[Id], [t7].[Id] AS [Id0] FROM [OwnedPerson] AS [o9] INNER JOIN ( - SELECT [o10].[Id], [o10].[Discriminator] + SELECT [o10].[Id], [o10].[Discriminator], [o10].[Name] FROM [OwnedPerson] AS [o10] WHERE [o10].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t7] ON [o9].[Id] = [t7].[Id] @@ -77,7 +79,7 @@ LEFT JOIN ( SELECT [o11].[Id], [t10].[Id] AS [Id0] FROM [OwnedPerson] AS [o11] INNER JOIN ( - SELECT [o12].[Id], [o12].[Discriminator] + SELECT [o12].[Id], [o12].[Discriminator], [o12].[Name] FROM [OwnedPerson] AS [o12] WHERE [o12].[Discriminator] = N'LeafA' ) AS [t10] ON [o11].[Id] = [t10].[Id] @@ -89,7 +91,7 @@ INNER JOIN ( SELECT [o14].[Id], [t12].[Id] AS [Id0] FROM [OwnedPerson] AS [o14] INNER JOIN ( - SELECT [o15].[Id], [o15].[Discriminator] + SELECT [o15].[Id], [o15].[Discriminator], [o15].[Name] FROM [OwnedPerson] AS [o15] WHERE [o15].[Discriminator] = N'LeafA' ) AS [t12] ON [o14].[Id] = [t12].[Id] @@ -107,28 +109,30 @@ public override async Task Query_for_base_type_loads_all_owned_navs(bool async) // See issue #10067 AssertSql( - @"SELECT [o].[Id], [o].[Discriminator], [t0].[Id], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [t5].[Id], [t8].[Id], [t8].[BranchAddress_Country_Name], [t8].[BranchAddress_Country_PlanetId], [t10].[Id], [t13].[Id], [t13].[LeafBAddress_Country_Name], [t13].[LeafBAddress_Country_PlanetId], [t15].[Id], [t18].[Id], [t18].[LeafAAddress_Country_Name], [t18].[LeafAAddress_Country_PlanetId], [o20].[ClientId], [o20].[Id] + @"SELECT [o].[Id], [o].[Discriminator], [o].[Name], [t0].[Id], [t0].[PersonAddress_AddressLine], [t0].[PersonAddress_ZipCode], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [t5].[Id], [t8].[Id], [t8].[BranchAddress_Country_Name], [t8].[BranchAddress_Country_PlanetId], [t10].[Id], [t13].[Id], [t13].[LeafBAddress_Country_Name], [t13].[LeafBAddress_Country_PlanetId], [t15].[Id], [t18].[Id], [t18].[LeafAAddress_Country_Name], [t18].[LeafAAddress_Country_PlanetId], [o20].[ClientId], [o20].[Id], [o20].[OrderDate] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -136,7 +140,7 @@ LEFT JOIN ( SELECT [o5].[Id], [t4].[Id] AS [Id0] FROM [OwnedPerson] AS [o5] INNER JOIN ( - SELECT [o6].[Id], [o6].[Discriminator] + SELECT [o6].[Id], [o6].[Discriminator], [o6].[Name] FROM [OwnedPerson] AS [o6] WHERE [o6].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t4] ON [o5].[Id] = [t4].[Id] @@ -148,7 +152,7 @@ INNER JOIN ( SELECT [o8].[Id], [t6].[Id] AS [Id0] FROM [OwnedPerson] AS [o8] INNER JOIN ( - SELECT [o9].[Id], [o9].[Discriminator] + SELECT [o9].[Id], [o9].[Discriminator], [o9].[Name] FROM [OwnedPerson] AS [o9] WHERE [o9].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t6] ON [o8].[Id] = [t6].[Id] @@ -159,7 +163,7 @@ LEFT JOIN ( SELECT [o10].[Id], [t9].[Id] AS [Id0] FROM [OwnedPerson] AS [o10] INNER JOIN ( - SELECT [o11].[Id], [o11].[Discriminator] + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] FROM [OwnedPerson] AS [o11] WHERE [o11].[Discriminator] = N'LeafB' ) AS [t9] ON [o10].[Id] = [t9].[Id] @@ -171,7 +175,7 @@ INNER JOIN ( SELECT [o13].[Id], [t11].[Id] AS [Id0] FROM [OwnedPerson] AS [o13] INNER JOIN ( - SELECT [o14].[Id], [o14].[Discriminator] + SELECT [o14].[Id], [o14].[Discriminator], [o14].[Name] FROM [OwnedPerson] AS [o14] WHERE [o14].[Discriminator] = N'LeafB' ) AS [t11] ON [o13].[Id] = [t11].[Id] @@ -182,7 +186,7 @@ LEFT JOIN ( SELECT [o15].[Id], [t14].[Id] AS [Id0] FROM [OwnedPerson] AS [o15] INNER JOIN ( - SELECT [o16].[Id], [o16].[Discriminator] + SELECT [o16].[Id], [o16].[Discriminator], [o16].[Name] FROM [OwnedPerson] AS [o16] WHERE [o16].[Discriminator] = N'LeafA' ) AS [t14] ON [o15].[Id] = [t14].[Id] @@ -194,7 +198,7 @@ INNER JOIN ( SELECT [o18].[Id], [t16].[Id] AS [Id0] FROM [OwnedPerson] AS [o18] INNER JOIN ( - SELECT [o19].[Id], [o19].[Discriminator] + SELECT [o19].[Id], [o19].[Discriminator], [o19].[Name] FROM [OwnedPerson] AS [o19] WHERE [o19].[Discriminator] = N'LeafA' ) AS [t16] ON [o18].[Id] = [t16].[Id] @@ -221,28 +225,30 @@ public override async Task Query_for_branch_type_loads_all_owned_navs(bool async await base.Query_for_branch_type_loads_all_owned_navs(async); AssertSql( - @"SELECT [o].[Id], [o].[Discriminator], [t0].[Id], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [t5].[Id], [t8].[Id], [t8].[BranchAddress_Country_Name], [t8].[BranchAddress_Country_PlanetId], [t10].[Id], [t13].[Id], [t13].[LeafAAddress_Country_Name], [t13].[LeafAAddress_Country_PlanetId], [o15].[ClientId], [o15].[Id] + @"SELECT [o].[Id], [o].[Discriminator], [o].[Name], [t0].[Id], [t0].[PersonAddress_AddressLine], [t0].[PersonAddress_ZipCode], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [t5].[Id], [t8].[Id], [t8].[BranchAddress_Country_Name], [t8].[BranchAddress_Country_PlanetId], [t10].[Id], [t13].[Id], [t13].[LeafAAddress_Country_Name], [t13].[LeafAAddress_Country_PlanetId], [o15].[ClientId], [o15].[Id], [o15].[OrderDate] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -250,7 +256,7 @@ LEFT JOIN ( SELECT [o5].[Id], [t4].[Id] AS [Id0] FROM [OwnedPerson] AS [o5] INNER JOIN ( - SELECT [o6].[Id], [o6].[Discriminator] + SELECT [o6].[Id], [o6].[Discriminator], [o6].[Name] FROM [OwnedPerson] AS [o6] WHERE [o6].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t4] ON [o5].[Id] = [t4].[Id] @@ -262,7 +268,7 @@ INNER JOIN ( SELECT [o8].[Id], [t6].[Id] AS [Id0] FROM [OwnedPerson] AS [o8] INNER JOIN ( - SELECT [o9].[Id], [o9].[Discriminator] + SELECT [o9].[Id], [o9].[Discriminator], [o9].[Name] FROM [OwnedPerson] AS [o9] WHERE [o9].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t6] ON [o8].[Id] = [t6].[Id] @@ -273,7 +279,7 @@ LEFT JOIN ( SELECT [o10].[Id], [t9].[Id] AS [Id0] FROM [OwnedPerson] AS [o10] INNER JOIN ( - SELECT [o11].[Id], [o11].[Discriminator] + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] FROM [OwnedPerson] AS [o11] WHERE [o11].[Discriminator] = N'LeafA' ) AS [t9] ON [o10].[Id] = [t9].[Id] @@ -285,7 +291,7 @@ INNER JOIN ( SELECT [o13].[Id], [t11].[Id] AS [Id0] FROM [OwnedPerson] AS [o13] INNER JOIN ( - SELECT [o14].[Id], [o14].[Discriminator] + SELECT [o14].[Id], [o14].[Discriminator], [o14].[Name] FROM [OwnedPerson] AS [o14] WHERE [o14].[Discriminator] = N'LeafA' ) AS [t11] ON [o13].[Id] = [t11].[Id] @@ -302,28 +308,30 @@ public override async Task Query_for_branch_type_loads_all_owned_navs_tracking(b await base.Query_for_branch_type_loads_all_owned_navs_tracking(async); AssertSql( - @"SELECT [o].[Id], [o].[Discriminator], [t0].[Id], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [t5].[Id], [t8].[Id], [t8].[BranchAddress_Country_Name], [t8].[BranchAddress_Country_PlanetId], [t10].[Id], [t13].[Id], [t13].[LeafAAddress_Country_Name], [t13].[LeafAAddress_Country_PlanetId], [o15].[ClientId], [o15].[Id] + @"SELECT [o].[Id], [o].[Discriminator], [o].[Name], [t0].[Id], [t0].[PersonAddress_AddressLine], [t0].[PersonAddress_ZipCode], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [t5].[Id], [t8].[Id], [t8].[BranchAddress_Country_Name], [t8].[BranchAddress_Country_PlanetId], [t10].[Id], [t13].[Id], [t13].[LeafAAddress_Country_Name], [t13].[LeafAAddress_Country_PlanetId], [o15].[ClientId], [o15].[Id], [o15].[OrderDate] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -331,7 +339,7 @@ LEFT JOIN ( SELECT [o5].[Id], [t4].[Id] AS [Id0] FROM [OwnedPerson] AS [o5] INNER JOIN ( - SELECT [o6].[Id], [o6].[Discriminator] + SELECT [o6].[Id], [o6].[Discriminator], [o6].[Name] FROM [OwnedPerson] AS [o6] WHERE [o6].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t4] ON [o5].[Id] = [t4].[Id] @@ -343,7 +351,7 @@ INNER JOIN ( SELECT [o8].[Id], [t6].[Id] AS [Id0] FROM [OwnedPerson] AS [o8] INNER JOIN ( - SELECT [o9].[Id], [o9].[Discriminator] + SELECT [o9].[Id], [o9].[Discriminator], [o9].[Name] FROM [OwnedPerson] AS [o9] WHERE [o9].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t6] ON [o8].[Id] = [t6].[Id] @@ -354,7 +362,7 @@ LEFT JOIN ( SELECT [o10].[Id], [t9].[Id] AS [Id0] FROM [OwnedPerson] AS [o10] INNER JOIN ( - SELECT [o11].[Id], [o11].[Discriminator] + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] FROM [OwnedPerson] AS [o11] WHERE [o11].[Discriminator] = N'LeafA' ) AS [t9] ON [o10].[Id] = [t9].[Id] @@ -366,7 +374,7 @@ INNER JOIN ( SELECT [o13].[Id], [t11].[Id] AS [Id0] FROM [OwnedPerson] AS [o13] INNER JOIN ( - SELECT [o14].[Id], [o14].[Discriminator] + SELECT [o14].[Id], [o14].[Discriminator], [o14].[Name] FROM [OwnedPerson] AS [o14] WHERE [o14].[Discriminator] = N'LeafA' ) AS [t11] ON [o13].[Id] = [t11].[Id] @@ -383,28 +391,30 @@ public override async Task Query_for_leaf_type_loads_all_owned_navs(bool async) await base.Query_for_leaf_type_loads_all_owned_navs(async); AssertSql( - @"SELECT [o].[Id], [o].[Discriminator], [t0].[Id], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [t5].[Id], [t8].[Id], [t8].[BranchAddress_Country_Name], [t8].[BranchAddress_Country_PlanetId], [t10].[Id], [t13].[Id], [t13].[LeafAAddress_Country_Name], [t13].[LeafAAddress_Country_PlanetId], [o15].[ClientId], [o15].[Id] + @"SELECT [o].[Id], [o].[Discriminator], [o].[Name], [t0].[Id], [t0].[PersonAddress_AddressLine], [t0].[PersonAddress_ZipCode], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [t5].[Id], [t8].[Id], [t8].[BranchAddress_Country_Name], [t8].[BranchAddress_Country_PlanetId], [t10].[Id], [t13].[Id], [t13].[LeafAAddress_Country_Name], [t13].[LeafAAddress_Country_PlanetId], [o15].[ClientId], [o15].[Id], [o15].[OrderDate] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -412,7 +422,7 @@ LEFT JOIN ( SELECT [o5].[Id], [t4].[Id] AS [Id0] FROM [OwnedPerson] AS [o5] INNER JOIN ( - SELECT [o6].[Id], [o6].[Discriminator] + SELECT [o6].[Id], [o6].[Discriminator], [o6].[Name] FROM [OwnedPerson] AS [o6] WHERE [o6].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t4] ON [o5].[Id] = [t4].[Id] @@ -424,7 +434,7 @@ INNER JOIN ( SELECT [o8].[Id], [t6].[Id] AS [Id0] FROM [OwnedPerson] AS [o8] INNER JOIN ( - SELECT [o9].[Id], [o9].[Discriminator] + SELECT [o9].[Id], [o9].[Discriminator], [o9].[Name] FROM [OwnedPerson] AS [o9] WHERE [o9].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t6] ON [o8].[Id] = [t6].[Id] @@ -435,7 +445,7 @@ LEFT JOIN ( SELECT [o10].[Id], [t9].[Id] AS [Id0] FROM [OwnedPerson] AS [o10] INNER JOIN ( - SELECT [o11].[Id], [o11].[Discriminator] + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] FROM [OwnedPerson] AS [o11] WHERE [o11].[Discriminator] = N'LeafA' ) AS [t9] ON [o10].[Id] = [t9].[Id] @@ -447,7 +457,7 @@ INNER JOIN ( SELECT [o13].[Id], [t11].[Id] AS [Id0] FROM [OwnedPerson] AS [o13] INNER JOIN ( - SELECT [o14].[Id], [o14].[Discriminator] + SELECT [o14].[Id], [o14].[Discriminator], [o14].[Name] FROM [OwnedPerson] AS [o14] WHERE [o14].[Discriminator] = N'LeafA' ) AS [t11] ON [o13].[Id] = [t11].[Id] @@ -466,45 +476,48 @@ public override async Task Query_when_subquery(bool async) AssertSql( @"@__p_0='5' -SELECT [t0].[Id], [t0].[Discriminator], [t4].[Id], [t7].[Id], [t7].[PersonAddress_Country_Name], [t7].[PersonAddress_Country_PlanetId], [t9].[Id], [t12].[Id], [t12].[BranchAddress_Country_Name], [t12].[BranchAddress_Country_PlanetId], [t14].[Id], [t17].[Id], [t17].[LeafBAddress_Country_Name], [t17].[LeafBAddress_Country_PlanetId], [t19].[Id], [t22].[Id], [t22].[LeafAAddress_Country_Name], [t22].[LeafAAddress_Country_PlanetId], [o22].[ClientId], [o22].[Id] +SELECT [t0].[Id], [t0].[Discriminator], [t0].[Name], [t4].[Id], [t4].[PersonAddress_AddressLine], [t4].[PersonAddress_ZipCode], [t7].[Id], [t7].[PersonAddress_Country_Name], [t7].[PersonAddress_Country_PlanetId], [t9].[Id], [t12].[Id], [t12].[BranchAddress_Country_Name], [t12].[BranchAddress_Country_PlanetId], [t14].[Id], [t17].[Id], [t17].[LeafBAddress_Country_Name], [t17].[LeafBAddress_Country_PlanetId], [t19].[Id], [t22].[Id], [t22].[LeafAAddress_Country_Name], [t22].[LeafAAddress_Country_PlanetId], [o22].[ClientId], [o22].[Id], [o22].[OrderDate] FROM ( - SELECT TOP(@__p_0) [t].[Id], [t].[Discriminator] + SELECT TOP(@__p_0) [t].[Id], [t].[Discriminator], [t].[Name] FROM ( - SELECT DISTINCT [o].[Id], [o].[Discriminator] + SELECT DISTINCT [o].[Id], [o].[Discriminator], [o].[Name] FROM [OwnedPerson] AS [o] WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ORDER BY [t].[Id] ) AS [t0] LEFT JOIN ( - SELECT [o0].[Id], [t1].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o0].[Id] = [t1].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [t0].[Id] = [t2].[Id] LEFT JOIN ( - SELECT [o2].[Id], [t3].[Id] AS [Id0] + SELECT [o2].[Id], [o2].[PersonAddress_AddressLine], [o2].[PersonAddress_ZipCode], [t3].[Id] AS [Id0] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [o3].[Discriminator] + SELECT [o3].[Id], [o3].[Discriminator], [o3].[Name] FROM [OwnedPerson] AS [o3] WHERE [o3].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t3] ON [o2].[Id] = [t3].[Id] + WHERE [o2].[PersonAddress_ZipCode] IS NOT NULL ) AS [t4] ON [t0].[Id] = [t4].[Id] LEFT JOIN ( SELECT [o4].[Id], [o4].[PersonAddress_Country_Name], [o4].[PersonAddress_Country_PlanetId], [t6].[Id] AS [Id0], [t6].[Id0] AS [Id00] FROM [OwnedPerson] AS [o4] INNER JOIN ( - SELECT [o5].[Id], [t5].[Id] AS [Id0] + SELECT [o5].[Id], [o5].[PersonAddress_AddressLine], [o5].[PersonAddress_ZipCode], [t5].[Id] AS [Id0] FROM [OwnedPerson] AS [o5] INNER JOIN ( - SELECT [o6].[Id], [o6].[Discriminator] + SELECT [o6].[Id], [o6].[Discriminator], [o6].[Name] FROM [OwnedPerson] AS [o6] WHERE [o6].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t5] ON [o5].[Id] = [t5].[Id] + WHERE [o5].[PersonAddress_ZipCode] IS NOT NULL ) AS [t6] ON [o4].[Id] = [t6].[Id] WHERE [o4].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t7] ON [t4].[Id] = [t7].[Id] @@ -512,7 +525,7 @@ LEFT JOIN ( SELECT [o7].[Id], [t8].[Id] AS [Id0] FROM [OwnedPerson] AS [o7] INNER JOIN ( - SELECT [o8].[Id], [o8].[Discriminator] + SELECT [o8].[Id], [o8].[Discriminator], [o8].[Name] FROM [OwnedPerson] AS [o8] WHERE [o8].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t8] ON [o7].[Id] = [t8].[Id] @@ -524,7 +537,7 @@ INNER JOIN ( SELECT [o10].[Id], [t10].[Id] AS [Id0] FROM [OwnedPerson] AS [o10] INNER JOIN ( - SELECT [o11].[Id], [o11].[Discriminator] + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] FROM [OwnedPerson] AS [o11] WHERE [o11].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t10] ON [o10].[Id] = [t10].[Id] @@ -535,7 +548,7 @@ LEFT JOIN ( SELECT [o12].[Id], [t13].[Id] AS [Id0] FROM [OwnedPerson] AS [o12] INNER JOIN ( - SELECT [o13].[Id], [o13].[Discriminator] + SELECT [o13].[Id], [o13].[Discriminator], [o13].[Name] FROM [OwnedPerson] AS [o13] WHERE [o13].[Discriminator] = N'LeafB' ) AS [t13] ON [o12].[Id] = [t13].[Id] @@ -547,7 +560,7 @@ INNER JOIN ( SELECT [o15].[Id], [t15].[Id] AS [Id0] FROM [OwnedPerson] AS [o15] INNER JOIN ( - SELECT [o16].[Id], [o16].[Discriminator] + SELECT [o16].[Id], [o16].[Discriminator], [o16].[Name] FROM [OwnedPerson] AS [o16] WHERE [o16].[Discriminator] = N'LeafB' ) AS [t15] ON [o15].[Id] = [t15].[Id] @@ -558,7 +571,7 @@ LEFT JOIN ( SELECT [o17].[Id], [t18].[Id] AS [Id0] FROM [OwnedPerson] AS [o17] INNER JOIN ( - SELECT [o18].[Id], [o18].[Discriminator] + SELECT [o18].[Id], [o18].[Discriminator], [o18].[Name] FROM [OwnedPerson] AS [o18] WHERE [o18].[Discriminator] = N'LeafA' ) AS [t18] ON [o17].[Id] = [t18].[Id] @@ -570,7 +583,7 @@ INNER JOIN ( SELECT [o20].[Id], [t20].[Id] AS [Id0] FROM [OwnedPerson] AS [o20] INNER JOIN ( - SELECT [o21].[Id], [o21].[Discriminator] + SELECT [o21].[Id], [o21].[Discriminator], [o21].[Name] FROM [OwnedPerson] AS [o21] WHERE [o21].[Discriminator] = N'LeafA' ) AS [t20] ON [o20].[Id] = [t20].[Id] @@ -589,25 +602,27 @@ public override async Task Navigation_rewrite_on_owned_reference_projecting_scal @"SELECT [t3].[PersonAddress_Country_Name] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -619,28 +634,30 @@ public override async Task Navigation_rewrite_on_owned_reference_projecting_enti await base.Navigation_rewrite_on_owned_reference_projecting_entity(async); AssertSql( - @"SELECT [o].[Id], [o].[Discriminator], [t0].[Id], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [t5].[Id], [t8].[Id], [t8].[BranchAddress_Country_Name], [t8].[BranchAddress_Country_PlanetId], [t10].[Id], [t13].[Id], [t13].[LeafBAddress_Country_Name], [t13].[LeafBAddress_Country_PlanetId], [t15].[Id], [t18].[Id], [t18].[LeafAAddress_Country_Name], [t18].[LeafAAddress_Country_PlanetId], [o20].[ClientId], [o20].[Id] + @"SELECT [o].[Id], [o].[Discriminator], [o].[Name], [t0].[Id], [t0].[PersonAddress_AddressLine], [t0].[PersonAddress_ZipCode], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [t5].[Id], [t8].[Id], [t8].[BranchAddress_Country_Name], [t8].[BranchAddress_Country_PlanetId], [t10].[Id], [t13].[Id], [t13].[LeafBAddress_Country_Name], [t13].[LeafBAddress_Country_PlanetId], [t15].[Id], [t18].[Id], [t18].[LeafAAddress_Country_Name], [t18].[LeafAAddress_Country_PlanetId], [o20].[ClientId], [o20].[Id], [o20].[OrderDate] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -648,7 +665,7 @@ LEFT JOIN ( SELECT [o5].[Id], [t4].[Id] AS [Id0] FROM [OwnedPerson] AS [o5] INNER JOIN ( - SELECT [o6].[Id], [o6].[Discriminator] + SELECT [o6].[Id], [o6].[Discriminator], [o6].[Name] FROM [OwnedPerson] AS [o6] WHERE [o6].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t4] ON [o5].[Id] = [t4].[Id] @@ -660,7 +677,7 @@ INNER JOIN ( SELECT [o8].[Id], [t6].[Id] AS [Id0] FROM [OwnedPerson] AS [o8] INNER JOIN ( - SELECT [o9].[Id], [o9].[Discriminator] + SELECT [o9].[Id], [o9].[Discriminator], [o9].[Name] FROM [OwnedPerson] AS [o9] WHERE [o9].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t6] ON [o8].[Id] = [t6].[Id] @@ -671,7 +688,7 @@ LEFT JOIN ( SELECT [o10].[Id], [t9].[Id] AS [Id0] FROM [OwnedPerson] AS [o10] INNER JOIN ( - SELECT [o11].[Id], [o11].[Discriminator] + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] FROM [OwnedPerson] AS [o11] WHERE [o11].[Discriminator] = N'LeafB' ) AS [t9] ON [o10].[Id] = [t9].[Id] @@ -683,7 +700,7 @@ INNER JOIN ( SELECT [o13].[Id], [t11].[Id] AS [Id0] FROM [OwnedPerson] AS [o13] INNER JOIN ( - SELECT [o14].[Id], [o14].[Discriminator] + SELECT [o14].[Id], [o14].[Discriminator], [o14].[Name] FROM [OwnedPerson] AS [o14] WHERE [o14].[Discriminator] = N'LeafB' ) AS [t11] ON [o13].[Id] = [t11].[Id] @@ -694,7 +711,7 @@ LEFT JOIN ( SELECT [o15].[Id], [t14].[Id] AS [Id0] FROM [OwnedPerson] AS [o15] INNER JOIN ( - SELECT [o16].[Id], [o16].[Discriminator] + SELECT [o16].[Id], [o16].[Discriminator], [o16].[Name] FROM [OwnedPerson] AS [o16] WHERE [o16].[Discriminator] = N'LeafA' ) AS [t14] ON [o15].[Id] = [t14].[Id] @@ -706,7 +723,7 @@ INNER JOIN ( SELECT [o18].[Id], [t16].[Id] AS [Id0] FROM [OwnedPerson] AS [o18] INNER JOIN ( - SELECT [o19].[Id], [o19].[Discriminator] + SELECT [o19].[Id], [o19].[Discriminator], [o19].[Name] FROM [OwnedPerson] AS [o19] WHERE [o19].[Discriminator] = N'LeafA' ) AS [t16] ON [o18].[Id] = [t16].[Id] @@ -723,7 +740,7 @@ public override async Task Navigation_rewrite_on_owned_collection(bool async) await base.Navigation_rewrite_on_owned_collection(async); AssertSql( - @"SELECT [o].[Id], [o0].[ClientId], [o0].[Id] + @"SELECT [o].[Id], [o0].[ClientId], [o0].[Id], [o0].[OrderDate] FROM [OwnedPerson] AS [o] LEFT JOIN [Order] AS [o0] ON [o].[Id] = [o0].[ClientId] WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') AND (( @@ -760,30 +777,32 @@ public override async Task Navigation_rewrite_on_owned_collection_with_compositi SELECT TOP(1) [t4].[PersonAddress_Country_Name] FROM [Order] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [o0].[Discriminator] + SELECT [o0].[Id], [o0].[Discriminator], [o0].[Name] FROM [OwnedPerson] AS [o0] WHERE [o0].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o].[ClientId] = [t].[Id] LEFT JOIN ( - SELECT [o1].[Id], [t0].[Id] AS [Id0] + SELECT [o1].[Id], [o1].[PersonAddress_AddressLine], [o1].[PersonAddress_ZipCode], [t0].[Id] AS [Id0] FROM [OwnedPerson] AS [o1] INNER JOIN ( - SELECT [o2].[Id], [o2].[Discriminator] + SELECT [o2].[Id], [o2].[Discriminator], [o2].[Name] FROM [OwnedPerson] AS [o2] WHERE [o2].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t0] ON [o1].[Id] = [t0].[Id] + WHERE [o1].[PersonAddress_ZipCode] IS NOT NULL ) AS [t1] ON [t].[Id] = [t1].[Id] LEFT JOIN ( SELECT [o3].[Id], [o3].[PersonAddress_Country_Name], [o3].[PersonAddress_Country_PlanetId], [t3].[Id] AS [Id0], [t3].[Id0] AS [Id00] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [t2].[Id] AS [Id0] + SELECT [o4].[Id], [o4].[PersonAddress_AddressLine], [o4].[PersonAddress_ZipCode], [t2].[Id] AS [Id0] FROM [OwnedPerson] AS [o4] INNER JOIN ( - SELECT [o5].[Id], [o5].[Discriminator] + SELECT [o5].[Id], [o5].[Discriminator], [o5].[Name] FROM [OwnedPerson] AS [o5] WHERE [o5].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t2] ON [o4].[Id] = [t2].[Id] + WHERE [o4].[PersonAddress_ZipCode] IS NOT NULL ) AS [t3] ON [o3].[Id] = [t3].[Id] WHERE [o3].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t4] ON [t1].[Id] = [t4].[Id] @@ -798,7 +817,7 @@ public override async Task SelectMany_on_owned_collection(bool async) await base.SelectMany_on_owned_collection(async); AssertSql( - @"SELECT [o0].[ClientId], [o0].[Id] + @"SELECT [o0].[ClientId], [o0].[Id], [o0].[OrderDate] FROM [OwnedPerson] AS [o] INNER JOIN [Order] AS [o0] ON [o].[Id] = [o0].[ClientId] WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA')"); @@ -812,25 +831,27 @@ public override async Task Navigation_rewrite_on_owned_reference_followed_by_reg @"SELECT [p].[Id], [p].[StarId] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -843,28 +864,30 @@ public override async Task Filter_owned_entity_chained_with_regular_entity_follo await base.Filter_owned_entity_chained_with_regular_entity_followed_by_projecting_owned_collection(async); AssertSql( - @"SELECT [o].[Id], [o5].[ClientId], [o5].[Id] + @"SELECT [o].[Id], [o5].[ClientId], [o5].[Id], [o5].[OrderDate] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -879,28 +902,30 @@ public override async Task Project_multiple_owned_navigations(bool async) await base.Project_multiple_owned_navigations(async); AssertSql( - @"SELECT [t0].[Id], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [p].[Id], [p].[StarId], [o].[Id], [o5].[ClientId], [o5].[Id] + @"SELECT [t0].[Id], [t0].[PersonAddress_AddressLine], [t0].[PersonAddress_ZipCode], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [p].[Id], [p].[StarId], [o].[Id], [o5].[ClientId], [o5].[Id], [o5].[OrderDate] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -919,30 +944,32 @@ public override async Task Project_multiple_owned_navigations_with_expansion_on_ SELECT COUNT(*) FROM [Order] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [o0].[Discriminator] + SELECT [o0].[Id], [o0].[Discriminator], [o0].[Name] FROM [OwnedPerson] AS [o0] WHERE [o0].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o].[ClientId] = [t].[Id] LEFT JOIN ( - SELECT [o1].[Id], [t0].[Id] AS [Id0] + SELECT [o1].[Id], [o1].[PersonAddress_AddressLine], [o1].[PersonAddress_ZipCode], [t0].[Id] AS [Id0] FROM [OwnedPerson] AS [o1] INNER JOIN ( - SELECT [o2].[Id], [o2].[Discriminator] + SELECT [o2].[Id], [o2].[Discriminator], [o2].[Name] FROM [OwnedPerson] AS [o2] WHERE [o2].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t0] ON [o1].[Id] = [t0].[Id] + WHERE [o1].[PersonAddress_ZipCode] IS NOT NULL ) AS [t1] ON [t].[Id] = [t1].[Id] LEFT JOIN ( SELECT [o3].[Id], [o3].[PersonAddress_Country_Name], [o3].[PersonAddress_Country_PlanetId], [t3].[Id] AS [Id0], [t3].[Id0] AS [Id00] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [t2].[Id] AS [Id0] + SELECT [o4].[Id], [o4].[PersonAddress_AddressLine], [o4].[PersonAddress_ZipCode], [t2].[Id] AS [Id0] FROM [OwnedPerson] AS [o4] INNER JOIN ( - SELECT [o5].[Id], [o5].[Discriminator] + SELECT [o5].[Id], [o5].[Discriminator], [o5].[Name] FROM [OwnedPerson] AS [o5] WHERE [o5].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t2] ON [o4].[Id] = [t2].[Id] + WHERE [o4].[PersonAddress_ZipCode] IS NOT NULL ) AS [t3] ON [o3].[Id] = [t3].[Id] WHERE [o3].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t4] ON [t1].[Id] = [t4].[Id] @@ -951,25 +978,27 @@ WHERE [o3].[PersonAddress_Country_PlanetId] IS NOT NULL WHERE ([o6].[Id] = [o].[ClientId]) AND (([s].[Id] <> 42) OR [s].[Id] IS NULL)) AS [Count], [p0].[Id], [p0].[StarId] FROM [OwnedPerson] AS [o6] LEFT JOIN ( - SELECT [o7].[Id], [t5].[Id] AS [Id0] + SELECT [o7].[Id], [o7].[PersonAddress_AddressLine], [o7].[PersonAddress_ZipCode], [t5].[Id] AS [Id0] FROM [OwnedPerson] AS [o7] INNER JOIN ( - SELECT [o8].[Id], [o8].[Discriminator] + SELECT [o8].[Id], [o8].[Discriminator], [o8].[Name] FROM [OwnedPerson] AS [o8] WHERE [o8].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t5] ON [o7].[Id] = [t5].[Id] + WHERE [o7].[PersonAddress_ZipCode] IS NOT NULL ) AS [t6] ON [o6].[Id] = [t6].[Id] LEFT JOIN ( SELECT [o9].[Id], [o9].[PersonAddress_Country_Name], [o9].[PersonAddress_Country_PlanetId], [t8].[Id] AS [Id0], [t8].[Id0] AS [Id00] FROM [OwnedPerson] AS [o9] INNER JOIN ( - SELECT [o10].[Id], [t7].[Id] AS [Id0] + SELECT [o10].[Id], [o10].[PersonAddress_AddressLine], [o10].[PersonAddress_ZipCode], [t7].[Id] AS [Id0] FROM [OwnedPerson] AS [o10] INNER JOIN ( - SELECT [o11].[Id], [o11].[Discriminator] + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] FROM [OwnedPerson] AS [o11] WHERE [o11].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t7] ON [o10].[Id] = [t7].[Id] + WHERE [o10].[PersonAddress_ZipCode] IS NOT NULL ) AS [t8] ON [o9].[Id] = [t8].[Id] WHERE [o9].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t9] ON [t6].[Id] = [t9].[Id] @@ -983,28 +1012,30 @@ public override async Task Navigation_rewrite_on_owned_reference_followed_by_reg await base.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_filter(async); AssertSql( - @"SELECT [o].[Id], [o].[Discriminator], [t0].[Id], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [t5].[Id], [t8].[Id], [t8].[BranchAddress_Country_Name], [t8].[BranchAddress_Country_PlanetId], [t10].[Id], [t13].[Id], [t13].[LeafBAddress_Country_Name], [t13].[LeafBAddress_Country_PlanetId], [t15].[Id], [t18].[Id], [t18].[LeafAAddress_Country_Name], [t18].[LeafAAddress_Country_PlanetId], [o20].[ClientId], [o20].[Id] + @"SELECT [o].[Id], [o].[Discriminator], [o].[Name], [t0].[Id], [t0].[PersonAddress_AddressLine], [t0].[PersonAddress_ZipCode], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [t5].[Id], [t8].[Id], [t8].[BranchAddress_Country_Name], [t8].[BranchAddress_Country_PlanetId], [t10].[Id], [t13].[Id], [t13].[LeafBAddress_Country_Name], [t13].[LeafBAddress_Country_PlanetId], [t15].[Id], [t18].[Id], [t18].[LeafAAddress_Country_Name], [t18].[LeafAAddress_Country_PlanetId], [o20].[ClientId], [o20].[Id], [o20].[OrderDate] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -1013,7 +1044,7 @@ LEFT JOIN ( SELECT [o5].[Id], [t4].[Id] AS [Id0] FROM [OwnedPerson] AS [o5] INNER JOIN ( - SELECT [o6].[Id], [o6].[Discriminator] + SELECT [o6].[Id], [o6].[Discriminator], [o6].[Name] FROM [OwnedPerson] AS [o6] WHERE [o6].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t4] ON [o5].[Id] = [t4].[Id] @@ -1025,7 +1056,7 @@ INNER JOIN ( SELECT [o8].[Id], [t6].[Id] AS [Id0] FROM [OwnedPerson] AS [o8] INNER JOIN ( - SELECT [o9].[Id], [o9].[Discriminator] + SELECT [o9].[Id], [o9].[Discriminator], [o9].[Name] FROM [OwnedPerson] AS [o9] WHERE [o9].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t6] ON [o8].[Id] = [t6].[Id] @@ -1036,7 +1067,7 @@ LEFT JOIN ( SELECT [o10].[Id], [t9].[Id] AS [Id0] FROM [OwnedPerson] AS [o10] INNER JOIN ( - SELECT [o11].[Id], [o11].[Discriminator] + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] FROM [OwnedPerson] AS [o11] WHERE [o11].[Discriminator] = N'LeafB' ) AS [t9] ON [o10].[Id] = [t9].[Id] @@ -1048,7 +1079,7 @@ INNER JOIN ( SELECT [o13].[Id], [t11].[Id] AS [Id0] FROM [OwnedPerson] AS [o13] INNER JOIN ( - SELECT [o14].[Id], [o14].[Discriminator] + SELECT [o14].[Id], [o14].[Discriminator], [o14].[Name] FROM [OwnedPerson] AS [o14] WHERE [o14].[Discriminator] = N'LeafB' ) AS [t11] ON [o13].[Id] = [t11].[Id] @@ -1059,7 +1090,7 @@ LEFT JOIN ( SELECT [o15].[Id], [t14].[Id] AS [Id0] FROM [OwnedPerson] AS [o15] INNER JOIN ( - SELECT [o16].[Id], [o16].[Discriminator] + SELECT [o16].[Id], [o16].[Discriminator], [o16].[Name] FROM [OwnedPerson] AS [o16] WHERE [o16].[Discriminator] = N'LeafA' ) AS [t14] ON [o15].[Id] = [t14].[Id] @@ -1071,7 +1102,7 @@ INNER JOIN ( SELECT [o18].[Id], [t16].[Id] AS [Id0] FROM [OwnedPerson] AS [o18] INNER JOIN ( - SELECT [o19].[Id], [o19].[Discriminator] + SELECT [o19].[Id], [o19].[Discriminator], [o19].[Name] FROM [OwnedPerson] AS [o19] WHERE [o19].[Discriminator] = N'LeafA' ) AS [t16] ON [o18].[Id] = [t16].[Id] @@ -1091,25 +1122,27 @@ public override async Task Navigation_rewrite_on_owned_reference_followed_by_reg @"SELECT [p].[Id] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -1125,25 +1158,27 @@ public override async Task Navigation_rewrite_on_owned_reference_followed_by_reg @"SELECT [o].[Id], [m].[Id], [m].[Diameter], [m].[PlanetId] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -1161,25 +1196,27 @@ public override async Task SelectMany_on_owned_reference_followed_by_regular_ent @"SELECT [m].[Id], [m].[Diameter], [m].[PlanetId] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -1196,25 +1233,27 @@ public override async Task SelectMany_on_owned_reference_with_entity_in_between_ @"SELECT [e].[Id], [e].[Name], [e].[StarId] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -1232,25 +1271,27 @@ public override async Task Navigation_rewrite_on_owned_reference_followed_by_reg @"SELECT [s].[Id], [s].[Name], [o].[Id], [e].[Id], [e].[Name], [e].[StarId] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -1270,25 +1311,27 @@ public override async Task Navigation_rewrite_on_owned_reference_followed_by_reg @"SELECT [s].[Name] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -1307,25 +1350,27 @@ await base.Navigation_rewrite_on_owned_reference_followed_by_regular_entity_and_ @"SELECT [s].[Id], [s].[Name], [o].[Id], [e].[Id], [e].[Name], [e].[StarId] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -1341,28 +1386,30 @@ public override async Task Query_with_OfType_eagerly_loads_correct_owned_navigat await base.Query_with_OfType_eagerly_loads_correct_owned_navigations(async); AssertSql( - @"SELECT [o].[Id], [o].[Discriminator], [t0].[Id], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [t5].[Id], [t8].[Id], [t8].[BranchAddress_Country_Name], [t8].[BranchAddress_Country_PlanetId], [t10].[Id], [t13].[Id], [t13].[LeafAAddress_Country_Name], [t13].[LeafAAddress_Country_PlanetId], [o15].[ClientId], [o15].[Id] + @"SELECT [o].[Id], [o].[Discriminator], [o].[Name], [t0].[Id], [t0].[PersonAddress_AddressLine], [t0].[PersonAddress_ZipCode], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [t5].[Id], [t8].[Id], [t8].[BranchAddress_Country_Name], [t8].[BranchAddress_Country_PlanetId], [t10].[Id], [t13].[Id], [t13].[LeafAAddress_Country_Name], [t13].[LeafAAddress_Country_PlanetId], [o15].[ClientId], [o15].[Id], [o15].[OrderDate] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -1370,7 +1417,7 @@ LEFT JOIN ( SELECT [o5].[Id], [t4].[Id] AS [Id0] FROM [OwnedPerson] AS [o5] INNER JOIN ( - SELECT [o6].[Id], [o6].[Discriminator] + SELECT [o6].[Id], [o6].[Discriminator], [o6].[Name] FROM [OwnedPerson] AS [o6] WHERE [o6].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t4] ON [o5].[Id] = [t4].[Id] @@ -1382,7 +1429,7 @@ INNER JOIN ( SELECT [o8].[Id], [t6].[Id] AS [Id0] FROM [OwnedPerson] AS [o8] INNER JOIN ( - SELECT [o9].[Id], [o9].[Discriminator] + SELECT [o9].[Id], [o9].[Discriminator], [o9].[Name] FROM [OwnedPerson] AS [o9] WHERE [o9].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t6] ON [o8].[Id] = [t6].[Id] @@ -1393,7 +1440,7 @@ LEFT JOIN ( SELECT [o10].[Id], [t9].[Id] AS [Id0] FROM [OwnedPerson] AS [o10] INNER JOIN ( - SELECT [o11].[Id], [o11].[Discriminator] + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] FROM [OwnedPerson] AS [o11] WHERE [o11].[Discriminator] = N'LeafA' ) AS [t9] ON [o10].[Id] = [t9].[Id] @@ -1405,7 +1452,7 @@ INNER JOIN ( SELECT [o13].[Id], [t11].[Id] AS [Id0] FROM [OwnedPerson] AS [o13] INNER JOIN ( - SELECT [o14].[Id], [o14].[Discriminator] + SELECT [o14].[Id], [o14].[Discriminator], [o14].[Name] FROM [OwnedPerson] AS [o14] WHERE [o14].[Discriminator] = N'LeafA' ) AS [t11] ON [o13].[Id] = [t11].[Id] @@ -1429,43 +1476,46 @@ WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA')", @"@__p_1='0' @__p_2='100' -SELECT [t].[Id], [t].[Discriminator], [t3].[Id], [t6].[Id], [t6].[PersonAddress_Country_Name], [t6].[PersonAddress_Country_PlanetId], [t8].[Id], [t11].[Id], [t11].[BranchAddress_Country_Name], [t11].[BranchAddress_Country_PlanetId], [t13].[Id], [t16].[Id], [t16].[LeafBAddress_Country_Name], [t16].[LeafBAddress_Country_PlanetId], [t18].[Id], [t21].[Id], [t21].[LeafAAddress_Country_Name], [t21].[LeafAAddress_Country_PlanetId], [o22].[ClientId], [o22].[Id] +SELECT [t].[Id], [t].[Discriminator], [t].[Name], [t3].[Id], [t3].[PersonAddress_AddressLine], [t3].[PersonAddress_ZipCode], [t6].[Id], [t6].[PersonAddress_Country_Name], [t6].[PersonAddress_Country_PlanetId], [t8].[Id], [t11].[Id], [t11].[BranchAddress_Country_Name], [t11].[BranchAddress_Country_PlanetId], [t13].[Id], [t16].[Id], [t16].[LeafBAddress_Country_Name], [t16].[LeafBAddress_Country_PlanetId], [t18].[Id], [t21].[Id], [t21].[LeafAAddress_Country_Name], [t21].[LeafAAddress_Country_PlanetId], [o22].[ClientId], [o22].[Id], [o22].[OrderDate] FROM ( - SELECT [o].[Id], [o].[Discriminator] + SELECT [o].[Id], [o].[Discriminator], [o].[Name] FROM [OwnedPerson] AS [o] WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ORDER BY [o].[Id] OFFSET @__p_1 ROWS FETCH NEXT @__p_2 ROWS ONLY ) AS [t] LEFT JOIN ( - SELECT [o0].[Id], [t0].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t0].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t0] ON [o0].[Id] = [t0].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t1] ON [t].[Id] = [t1].[Id] LEFT JOIN ( - SELECT [o2].[Id], [t2].[Id] AS [Id0] + SELECT [o2].[Id], [o2].[PersonAddress_AddressLine], [o2].[PersonAddress_ZipCode], [t2].[Id] AS [Id0] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [o3].[Discriminator] + SELECT [o3].[Id], [o3].[Discriminator], [o3].[Name] FROM [OwnedPerson] AS [o3] WHERE [o3].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t2] ON [o2].[Id] = [t2].[Id] + WHERE [o2].[PersonAddress_ZipCode] IS NOT NULL ) AS [t3] ON [t].[Id] = [t3].[Id] LEFT JOIN ( SELECT [o4].[Id], [o4].[PersonAddress_Country_Name], [o4].[PersonAddress_Country_PlanetId], [t5].[Id] AS [Id0], [t5].[Id0] AS [Id00] FROM [OwnedPerson] AS [o4] INNER JOIN ( - SELECT [o5].[Id], [t4].[Id] AS [Id0] + SELECT [o5].[Id], [o5].[PersonAddress_AddressLine], [o5].[PersonAddress_ZipCode], [t4].[Id] AS [Id0] FROM [OwnedPerson] AS [o5] INNER JOIN ( - SELECT [o6].[Id], [o6].[Discriminator] + SELECT [o6].[Id], [o6].[Discriminator], [o6].[Name] FROM [OwnedPerson] AS [o6] WHERE [o6].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t4] ON [o5].[Id] = [t4].[Id] + WHERE [o5].[PersonAddress_ZipCode] IS NOT NULL ) AS [t5] ON [o4].[Id] = [t5].[Id] WHERE [o4].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t6] ON [t3].[Id] = [t6].[Id] @@ -1473,7 +1523,7 @@ LEFT JOIN ( SELECT [o7].[Id], [t7].[Id] AS [Id0] FROM [OwnedPerson] AS [o7] INNER JOIN ( - SELECT [o8].[Id], [o8].[Discriminator] + SELECT [o8].[Id], [o8].[Discriminator], [o8].[Name] FROM [OwnedPerson] AS [o8] WHERE [o8].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t7] ON [o7].[Id] = [t7].[Id] @@ -1485,7 +1535,7 @@ INNER JOIN ( SELECT [o10].[Id], [t9].[Id] AS [Id0] FROM [OwnedPerson] AS [o10] INNER JOIN ( - SELECT [o11].[Id], [o11].[Discriminator] + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] FROM [OwnedPerson] AS [o11] WHERE [o11].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t9] ON [o10].[Id] = [t9].[Id] @@ -1496,7 +1546,7 @@ LEFT JOIN ( SELECT [o12].[Id], [t12].[Id] AS [Id0] FROM [OwnedPerson] AS [o12] INNER JOIN ( - SELECT [o13].[Id], [o13].[Discriminator] + SELECT [o13].[Id], [o13].[Discriminator], [o13].[Name] FROM [OwnedPerson] AS [o13] WHERE [o13].[Discriminator] = N'LeafB' ) AS [t12] ON [o12].[Id] = [t12].[Id] @@ -1508,7 +1558,7 @@ INNER JOIN ( SELECT [o15].[Id], [t14].[Id] AS [Id0] FROM [OwnedPerson] AS [o15] INNER JOIN ( - SELECT [o16].[Id], [o16].[Discriminator] + SELECT [o16].[Id], [o16].[Discriminator], [o16].[Name] FROM [OwnedPerson] AS [o16] WHERE [o16].[Discriminator] = N'LeafB' ) AS [t14] ON [o15].[Id] = [t14].[Id] @@ -1519,7 +1569,7 @@ LEFT JOIN ( SELECT [o17].[Id], [t17].[Id] AS [Id0] FROM [OwnedPerson] AS [o17] INNER JOIN ( - SELECT [o18].[Id], [o18].[Discriminator] + SELECT [o18].[Id], [o18].[Discriminator], [o18].[Name] FROM [OwnedPerson] AS [o18] WHERE [o18].[Discriminator] = N'LeafA' ) AS [t17] ON [o17].[Id] = [t17].[Id] @@ -1531,7 +1581,7 @@ INNER JOIN ( SELECT [o20].[Id], [t19].[Id] AS [Id0] FROM [OwnedPerson] AS [o20] INNER JOIN ( - SELECT [o21].[Id], [o21].[Discriminator] + SELECT [o21].[Id], [o21].[Discriminator], [o21].[Name] FROM [OwnedPerson] AS [o21] WHERE [o21].[Discriminator] = N'LeafA' ) AS [t19] ON [o20].[Id] = [t19].[Id] @@ -1547,28 +1597,30 @@ public override async Task Unmapped_property_projection_loads_owned_navigations( await base.Unmapped_property_projection_loads_owned_navigations(async); AssertSql( - @"SELECT [o].[Id], [o].[Discriminator], [t0].[Id], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [t5].[Id], [t8].[Id], [t8].[BranchAddress_Country_Name], [t8].[BranchAddress_Country_PlanetId], [t10].[Id], [t13].[Id], [t13].[LeafBAddress_Country_Name], [t13].[LeafBAddress_Country_PlanetId], [t15].[Id], [t18].[Id], [t18].[LeafAAddress_Country_Name], [t18].[LeafAAddress_Country_PlanetId], [o20].[ClientId], [o20].[Id] + @"SELECT [o].[Id], [o].[Discriminator], [o].[Name], [t0].[Id], [t0].[PersonAddress_AddressLine], [t0].[PersonAddress_ZipCode], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [t5].[Id], [t8].[Id], [t8].[BranchAddress_Country_Name], [t8].[BranchAddress_Country_PlanetId], [t10].[Id], [t13].[Id], [t13].[LeafBAddress_Country_Name], [t13].[LeafBAddress_Country_PlanetId], [t15].[Id], [t18].[Id], [t18].[LeafAAddress_Country_Name], [t18].[LeafAAddress_Country_PlanetId], [o20].[ClientId], [o20].[Id], [o20].[OrderDate] FROM [OwnedPerson] AS [o] LEFT JOIN ( - SELECT [o0].[Id], [t].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t0] ON [o].[Id] = [t0].[Id] LEFT JOIN ( SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [t1].[Id] AS [Id0] + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] FROM [OwnedPerson] AS [o3] INNER JOIN ( - SELECT [o4].[Id], [o4].[Discriminator] + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] FROM [OwnedPerson] AS [o4] WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL ) AS [t2] ON [o2].[Id] = [t2].[Id] WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t3] ON [t0].[Id] = [t3].[Id] @@ -1576,7 +1628,7 @@ LEFT JOIN ( SELECT [o5].[Id], [t4].[Id] AS [Id0] FROM [OwnedPerson] AS [o5] INNER JOIN ( - SELECT [o6].[Id], [o6].[Discriminator] + SELECT [o6].[Id], [o6].[Discriminator], [o6].[Name] FROM [OwnedPerson] AS [o6] WHERE [o6].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t4] ON [o5].[Id] = [t4].[Id] @@ -1588,7 +1640,7 @@ INNER JOIN ( SELECT [o8].[Id], [t6].[Id] AS [Id0] FROM [OwnedPerson] AS [o8] INNER JOIN ( - SELECT [o9].[Id], [o9].[Discriminator] + SELECT [o9].[Id], [o9].[Discriminator], [o9].[Name] FROM [OwnedPerson] AS [o9] WHERE [o9].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t6] ON [o8].[Id] = [t6].[Id] @@ -1599,7 +1651,7 @@ LEFT JOIN ( SELECT [o10].[Id], [t9].[Id] AS [Id0] FROM [OwnedPerson] AS [o10] INNER JOIN ( - SELECT [o11].[Id], [o11].[Discriminator] + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] FROM [OwnedPerson] AS [o11] WHERE [o11].[Discriminator] = N'LeafB' ) AS [t9] ON [o10].[Id] = [t9].[Id] @@ -1611,7 +1663,7 @@ INNER JOIN ( SELECT [o13].[Id], [t11].[Id] AS [Id0] FROM [OwnedPerson] AS [o13] INNER JOIN ( - SELECT [o14].[Id], [o14].[Discriminator] + SELECT [o14].[Id], [o14].[Discriminator], [o14].[Name] FROM [OwnedPerson] AS [o14] WHERE [o14].[Discriminator] = N'LeafB' ) AS [t11] ON [o13].[Id] = [t11].[Id] @@ -1622,7 +1674,7 @@ LEFT JOIN ( SELECT [o15].[Id], [t14].[Id] AS [Id0] FROM [OwnedPerson] AS [o15] INNER JOIN ( - SELECT [o16].[Id], [o16].[Discriminator] + SELECT [o16].[Id], [o16].[Discriminator], [o16].[Name] FROM [OwnedPerson] AS [o16] WHERE [o16].[Discriminator] = N'LeafA' ) AS [t14] ON [o15].[Id] = [t14].[Id] @@ -1634,7 +1686,7 @@ INNER JOIN ( SELECT [o18].[Id], [t16].[Id] AS [Id0] FROM [OwnedPerson] AS [o18] INNER JOIN ( - SELECT [o19].[Id], [o19].[Discriminator] + SELECT [o19].[Id], [o19].[Discriminator], [o19].[Name] FROM [OwnedPerson] AS [o19] WHERE [o19].[Discriminator] = N'LeafA' ) AS [t16] ON [o18].[Id] = [t16].[Id] @@ -1653,43 +1705,46 @@ public override async Task Client_method_skip_loads_owned_navigations(bool async AssertSql( @"@__p_0='1' -SELECT [t].[Id], [t].[Discriminator], [t3].[Id], [t6].[Id], [t6].[PersonAddress_Country_Name], [t6].[PersonAddress_Country_PlanetId], [t8].[Id], [t11].[Id], [t11].[BranchAddress_Country_Name], [t11].[BranchAddress_Country_PlanetId], [t13].[Id], [t16].[Id], [t16].[LeafBAddress_Country_Name], [t16].[LeafBAddress_Country_PlanetId], [t18].[Id], [t21].[Id], [t21].[LeafAAddress_Country_Name], [t21].[LeafAAddress_Country_PlanetId], [o22].[ClientId], [o22].[Id] +SELECT [t].[Id], [t].[Discriminator], [t].[Name], [t3].[Id], [t3].[PersonAddress_AddressLine], [t3].[PersonAddress_ZipCode], [t6].[Id], [t6].[PersonAddress_Country_Name], [t6].[PersonAddress_Country_PlanetId], [t8].[Id], [t11].[Id], [t11].[BranchAddress_Country_Name], [t11].[BranchAddress_Country_PlanetId], [t13].[Id], [t16].[Id], [t16].[LeafBAddress_Country_Name], [t16].[LeafBAddress_Country_PlanetId], [t18].[Id], [t21].[Id], [t21].[LeafAAddress_Country_Name], [t21].[LeafAAddress_Country_PlanetId], [o22].[ClientId], [o22].[Id], [o22].[OrderDate] FROM ( - SELECT [o].[Id], [o].[Discriminator] + SELECT [o].[Id], [o].[Discriminator], [o].[Name] FROM [OwnedPerson] AS [o] WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ORDER BY [o].[Id] OFFSET @__p_0 ROWS ) AS [t] LEFT JOIN ( - SELECT [o0].[Id], [t0].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t0].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t0] ON [o0].[Id] = [t0].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t1] ON [t].[Id] = [t1].[Id] LEFT JOIN ( - SELECT [o2].[Id], [t2].[Id] AS [Id0] + SELECT [o2].[Id], [o2].[PersonAddress_AddressLine], [o2].[PersonAddress_ZipCode], [t2].[Id] AS [Id0] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [o3].[Discriminator] + SELECT [o3].[Id], [o3].[Discriminator], [o3].[Name] FROM [OwnedPerson] AS [o3] WHERE [o3].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t2] ON [o2].[Id] = [t2].[Id] + WHERE [o2].[PersonAddress_ZipCode] IS NOT NULL ) AS [t3] ON [t].[Id] = [t3].[Id] LEFT JOIN ( SELECT [o4].[Id], [o4].[PersonAddress_Country_Name], [o4].[PersonAddress_Country_PlanetId], [t5].[Id] AS [Id0], [t5].[Id0] AS [Id00] FROM [OwnedPerson] AS [o4] INNER JOIN ( - SELECT [o5].[Id], [t4].[Id] AS [Id0] + SELECT [o5].[Id], [o5].[PersonAddress_AddressLine], [o5].[PersonAddress_ZipCode], [t4].[Id] AS [Id0] FROM [OwnedPerson] AS [o5] INNER JOIN ( - SELECT [o6].[Id], [o6].[Discriminator] + SELECT [o6].[Id], [o6].[Discriminator], [o6].[Name] FROM [OwnedPerson] AS [o6] WHERE [o6].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t4] ON [o5].[Id] = [t4].[Id] + WHERE [o5].[PersonAddress_ZipCode] IS NOT NULL ) AS [t5] ON [o4].[Id] = [t5].[Id] WHERE [o4].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t6] ON [t3].[Id] = [t6].[Id] @@ -1697,7 +1752,7 @@ LEFT JOIN ( SELECT [o7].[Id], [t7].[Id] AS [Id0] FROM [OwnedPerson] AS [o7] INNER JOIN ( - SELECT [o8].[Id], [o8].[Discriminator] + SELECT [o8].[Id], [o8].[Discriminator], [o8].[Name] FROM [OwnedPerson] AS [o8] WHERE [o8].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t7] ON [o7].[Id] = [t7].[Id] @@ -1709,7 +1764,7 @@ INNER JOIN ( SELECT [o10].[Id], [t9].[Id] AS [Id0] FROM [OwnedPerson] AS [o10] INNER JOIN ( - SELECT [o11].[Id], [o11].[Discriminator] + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] FROM [OwnedPerson] AS [o11] WHERE [o11].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t9] ON [o10].[Id] = [t9].[Id] @@ -1720,7 +1775,7 @@ LEFT JOIN ( SELECT [o12].[Id], [t12].[Id] AS [Id0] FROM [OwnedPerson] AS [o12] INNER JOIN ( - SELECT [o13].[Id], [o13].[Discriminator] + SELECT [o13].[Id], [o13].[Discriminator], [o13].[Name] FROM [OwnedPerson] AS [o13] WHERE [o13].[Discriminator] = N'LeafB' ) AS [t12] ON [o12].[Id] = [t12].[Id] @@ -1732,7 +1787,7 @@ INNER JOIN ( SELECT [o15].[Id], [t14].[Id] AS [Id0] FROM [OwnedPerson] AS [o15] INNER JOIN ( - SELECT [o16].[Id], [o16].[Discriminator] + SELECT [o16].[Id], [o16].[Discriminator], [o16].[Name] FROM [OwnedPerson] AS [o16] WHERE [o16].[Discriminator] = N'LeafB' ) AS [t14] ON [o15].[Id] = [t14].[Id] @@ -1743,7 +1798,7 @@ LEFT JOIN ( SELECT [o17].[Id], [t17].[Id] AS [Id0] FROM [OwnedPerson] AS [o17] INNER JOIN ( - SELECT [o18].[Id], [o18].[Discriminator] + SELECT [o18].[Id], [o18].[Discriminator], [o18].[Name] FROM [OwnedPerson] AS [o18] WHERE [o18].[Discriminator] = N'LeafA' ) AS [t17] ON [o17].[Id] = [t17].[Id] @@ -1755,7 +1810,7 @@ INNER JOIN ( SELECT [o20].[Id], [t19].[Id] AS [Id0] FROM [OwnedPerson] AS [o20] INNER JOIN ( - SELECT [o21].[Id], [o21].[Discriminator] + SELECT [o21].[Id], [o21].[Discriminator], [o21].[Name] FROM [OwnedPerson] AS [o21] WHERE [o21].[Discriminator] = N'LeafA' ) AS [t19] ON [o20].[Id] = [t19].[Id] @@ -1773,42 +1828,45 @@ public override async Task Client_method_take_loads_owned_navigations(bool async AssertSql( @"@__p_0='2' -SELECT [t].[Id], [t].[Discriminator], [t3].[Id], [t6].[Id], [t6].[PersonAddress_Country_Name], [t6].[PersonAddress_Country_PlanetId], [t8].[Id], [t11].[Id], [t11].[BranchAddress_Country_Name], [t11].[BranchAddress_Country_PlanetId], [t13].[Id], [t16].[Id], [t16].[LeafBAddress_Country_Name], [t16].[LeafBAddress_Country_PlanetId], [t18].[Id], [t21].[Id], [t21].[LeafAAddress_Country_Name], [t21].[LeafAAddress_Country_PlanetId], [o22].[ClientId], [o22].[Id] +SELECT [t].[Id], [t].[Discriminator], [t].[Name], [t3].[Id], [t3].[PersonAddress_AddressLine], [t3].[PersonAddress_ZipCode], [t6].[Id], [t6].[PersonAddress_Country_Name], [t6].[PersonAddress_Country_PlanetId], [t8].[Id], [t11].[Id], [t11].[BranchAddress_Country_Name], [t11].[BranchAddress_Country_PlanetId], [t13].[Id], [t16].[Id], [t16].[LeafBAddress_Country_Name], [t16].[LeafBAddress_Country_PlanetId], [t18].[Id], [t21].[Id], [t21].[LeafAAddress_Country_Name], [t21].[LeafAAddress_Country_PlanetId], [o22].[ClientId], [o22].[Id], [o22].[OrderDate] FROM ( - SELECT TOP(@__p_0) [o].[Id], [o].[Discriminator] + SELECT TOP(@__p_0) [o].[Id], [o].[Discriminator], [o].[Name] FROM [OwnedPerson] AS [o] WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ORDER BY [o].[Id] ) AS [t] LEFT JOIN ( - SELECT [o0].[Id], [t0].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t0].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t0] ON [o0].[Id] = [t0].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t1] ON [t].[Id] = [t1].[Id] LEFT JOIN ( - SELECT [o2].[Id], [t2].[Id] AS [Id0] + SELECT [o2].[Id], [o2].[PersonAddress_AddressLine], [o2].[PersonAddress_ZipCode], [t2].[Id] AS [Id0] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [o3].[Discriminator] + SELECT [o3].[Id], [o3].[Discriminator], [o3].[Name] FROM [OwnedPerson] AS [o3] WHERE [o3].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t2] ON [o2].[Id] = [t2].[Id] + WHERE [o2].[PersonAddress_ZipCode] IS NOT NULL ) AS [t3] ON [t].[Id] = [t3].[Id] LEFT JOIN ( SELECT [o4].[Id], [o4].[PersonAddress_Country_Name], [o4].[PersonAddress_Country_PlanetId], [t5].[Id] AS [Id0], [t5].[Id0] AS [Id00] FROM [OwnedPerson] AS [o4] INNER JOIN ( - SELECT [o5].[Id], [t4].[Id] AS [Id0] + SELECT [o5].[Id], [o5].[PersonAddress_AddressLine], [o5].[PersonAddress_ZipCode], [t4].[Id] AS [Id0] FROM [OwnedPerson] AS [o5] INNER JOIN ( - SELECT [o6].[Id], [o6].[Discriminator] + SELECT [o6].[Id], [o6].[Discriminator], [o6].[Name] FROM [OwnedPerson] AS [o6] WHERE [o6].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t4] ON [o5].[Id] = [t4].[Id] + WHERE [o5].[PersonAddress_ZipCode] IS NOT NULL ) AS [t5] ON [o4].[Id] = [t5].[Id] WHERE [o4].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t6] ON [t3].[Id] = [t6].[Id] @@ -1816,7 +1874,7 @@ LEFT JOIN ( SELECT [o7].[Id], [t7].[Id] AS [Id0] FROM [OwnedPerson] AS [o7] INNER JOIN ( - SELECT [o8].[Id], [o8].[Discriminator] + SELECT [o8].[Id], [o8].[Discriminator], [o8].[Name] FROM [OwnedPerson] AS [o8] WHERE [o8].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t7] ON [o7].[Id] = [t7].[Id] @@ -1828,7 +1886,7 @@ INNER JOIN ( SELECT [o10].[Id], [t9].[Id] AS [Id0] FROM [OwnedPerson] AS [o10] INNER JOIN ( - SELECT [o11].[Id], [o11].[Discriminator] + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] FROM [OwnedPerson] AS [o11] WHERE [o11].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t9] ON [o10].[Id] = [t9].[Id] @@ -1839,7 +1897,7 @@ LEFT JOIN ( SELECT [o12].[Id], [t12].[Id] AS [Id0] FROM [OwnedPerson] AS [o12] INNER JOIN ( - SELECT [o13].[Id], [o13].[Discriminator] + SELECT [o13].[Id], [o13].[Discriminator], [o13].[Name] FROM [OwnedPerson] AS [o13] WHERE [o13].[Discriminator] = N'LeafB' ) AS [t12] ON [o12].[Id] = [t12].[Id] @@ -1851,7 +1909,7 @@ INNER JOIN ( SELECT [o15].[Id], [t14].[Id] AS [Id0] FROM [OwnedPerson] AS [o15] INNER JOIN ( - SELECT [o16].[Id], [o16].[Discriminator] + SELECT [o16].[Id], [o16].[Discriminator], [o16].[Name] FROM [OwnedPerson] AS [o16] WHERE [o16].[Discriminator] = N'LeafB' ) AS [t14] ON [o15].[Id] = [t14].[Id] @@ -1862,7 +1920,7 @@ LEFT JOIN ( SELECT [o17].[Id], [t17].[Id] AS [Id0] FROM [OwnedPerson] AS [o17] INNER JOIN ( - SELECT [o18].[Id], [o18].[Discriminator] + SELECT [o18].[Id], [o18].[Discriminator], [o18].[Name] FROM [OwnedPerson] AS [o18] WHERE [o18].[Discriminator] = N'LeafA' ) AS [t17] ON [o17].[Id] = [t17].[Id] @@ -1874,7 +1932,7 @@ INNER JOIN ( SELECT [o20].[Id], [t19].[Id] AS [Id0] FROM [OwnedPerson] AS [o20] INNER JOIN ( - SELECT [o21].[Id], [o21].[Discriminator] + SELECT [o21].[Id], [o21].[Discriminator], [o21].[Name] FROM [OwnedPerson] AS [o21] WHERE [o21].[Discriminator] = N'LeafA' ) AS [t19] ON [o20].[Id] = [t19].[Id] @@ -1893,43 +1951,46 @@ public override async Task Client_method_skip_take_loads_owned_navigations(bool @"@__p_0='1' @__p_1='2' -SELECT [t].[Id], [t].[Discriminator], [t3].[Id], [t6].[Id], [t6].[PersonAddress_Country_Name], [t6].[PersonAddress_Country_PlanetId], [t8].[Id], [t11].[Id], [t11].[BranchAddress_Country_Name], [t11].[BranchAddress_Country_PlanetId], [t13].[Id], [t16].[Id], [t16].[LeafBAddress_Country_Name], [t16].[LeafBAddress_Country_PlanetId], [t18].[Id], [t21].[Id], [t21].[LeafAAddress_Country_Name], [t21].[LeafAAddress_Country_PlanetId], [o22].[ClientId], [o22].[Id] +SELECT [t].[Id], [t].[Discriminator], [t].[Name], [t3].[Id], [t3].[PersonAddress_AddressLine], [t3].[PersonAddress_ZipCode], [t6].[Id], [t6].[PersonAddress_Country_Name], [t6].[PersonAddress_Country_PlanetId], [t8].[Id], [t11].[Id], [t11].[BranchAddress_Country_Name], [t11].[BranchAddress_Country_PlanetId], [t13].[Id], [t16].[Id], [t16].[LeafBAddress_Country_Name], [t16].[LeafBAddress_Country_PlanetId], [t18].[Id], [t21].[Id], [t21].[LeafAAddress_Country_Name], [t21].[LeafAAddress_Country_PlanetId], [o22].[ClientId], [o22].[Id], [o22].[OrderDate] FROM ( - SELECT [o].[Id], [o].[Discriminator] + SELECT [o].[Id], [o].[Discriminator], [o].[Name] FROM [OwnedPerson] AS [o] WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ORDER BY [o].[Id] OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY ) AS [t] LEFT JOIN ( - SELECT [o0].[Id], [t0].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t0].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t0] ON [o0].[Id] = [t0].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t1] ON [t].[Id] = [t1].[Id] LEFT JOIN ( - SELECT [o2].[Id], [t2].[Id] AS [Id0] + SELECT [o2].[Id], [o2].[PersonAddress_AddressLine], [o2].[PersonAddress_ZipCode], [t2].[Id] AS [Id0] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [o3].[Discriminator] + SELECT [o3].[Id], [o3].[Discriminator], [o3].[Name] FROM [OwnedPerson] AS [o3] WHERE [o3].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t2] ON [o2].[Id] = [t2].[Id] + WHERE [o2].[PersonAddress_ZipCode] IS NOT NULL ) AS [t3] ON [t].[Id] = [t3].[Id] LEFT JOIN ( SELECT [o4].[Id], [o4].[PersonAddress_Country_Name], [o4].[PersonAddress_Country_PlanetId], [t5].[Id] AS [Id0], [t5].[Id0] AS [Id00] FROM [OwnedPerson] AS [o4] INNER JOIN ( - SELECT [o5].[Id], [t4].[Id] AS [Id0] + SELECT [o5].[Id], [o5].[PersonAddress_AddressLine], [o5].[PersonAddress_ZipCode], [t4].[Id] AS [Id0] FROM [OwnedPerson] AS [o5] INNER JOIN ( - SELECT [o6].[Id], [o6].[Discriminator] + SELECT [o6].[Id], [o6].[Discriminator], [o6].[Name] FROM [OwnedPerson] AS [o6] WHERE [o6].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t4] ON [o5].[Id] = [t4].[Id] + WHERE [o5].[PersonAddress_ZipCode] IS NOT NULL ) AS [t5] ON [o4].[Id] = [t5].[Id] WHERE [o4].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t6] ON [t3].[Id] = [t6].[Id] @@ -1937,7 +1998,7 @@ LEFT JOIN ( SELECT [o7].[Id], [t7].[Id] AS [Id0] FROM [OwnedPerson] AS [o7] INNER JOIN ( - SELECT [o8].[Id], [o8].[Discriminator] + SELECT [o8].[Id], [o8].[Discriminator], [o8].[Name] FROM [OwnedPerson] AS [o8] WHERE [o8].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t7] ON [o7].[Id] = [t7].[Id] @@ -1949,7 +2010,7 @@ INNER JOIN ( SELECT [o10].[Id], [t9].[Id] AS [Id0] FROM [OwnedPerson] AS [o10] INNER JOIN ( - SELECT [o11].[Id], [o11].[Discriminator] + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] FROM [OwnedPerson] AS [o11] WHERE [o11].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t9] ON [o10].[Id] = [t9].[Id] @@ -1960,7 +2021,7 @@ LEFT JOIN ( SELECT [o12].[Id], [t12].[Id] AS [Id0] FROM [OwnedPerson] AS [o12] INNER JOIN ( - SELECT [o13].[Id], [o13].[Discriminator] + SELECT [o13].[Id], [o13].[Discriminator], [o13].[Name] FROM [OwnedPerson] AS [o13] WHERE [o13].[Discriminator] = N'LeafB' ) AS [t12] ON [o12].[Id] = [t12].[Id] @@ -1972,7 +2033,7 @@ INNER JOIN ( SELECT [o15].[Id], [t14].[Id] AS [Id0] FROM [OwnedPerson] AS [o15] INNER JOIN ( - SELECT [o16].[Id], [o16].[Discriminator] + SELECT [o16].[Id], [o16].[Discriminator], [o16].[Name] FROM [OwnedPerson] AS [o16] WHERE [o16].[Discriminator] = N'LeafB' ) AS [t14] ON [o15].[Id] = [t14].[Id] @@ -1983,7 +2044,7 @@ LEFT JOIN ( SELECT [o17].[Id], [t17].[Id] AS [Id0] FROM [OwnedPerson] AS [o17] INNER JOIN ( - SELECT [o18].[Id], [o18].[Discriminator] + SELECT [o18].[Id], [o18].[Discriminator], [o18].[Name] FROM [OwnedPerson] AS [o18] WHERE [o18].[Discriminator] = N'LeafA' ) AS [t17] ON [o17].[Id] = [t17].[Id] @@ -1995,7 +2056,7 @@ INNER JOIN ( SELECT [o20].[Id], [t19].[Id] AS [Id0] FROM [OwnedPerson] AS [o20] INNER JOIN ( - SELECT [o21].[Id], [o21].[Discriminator] + SELECT [o21].[Id], [o21].[Discriminator], [o21].[Name] FROM [OwnedPerson] AS [o21] WHERE [o21].[Discriminator] = N'LeafA' ) AS [t19] ON [o20].[Id] = [t19].[Id] @@ -2011,45 +2072,48 @@ public override async Task Client_method_skip_loads_owned_navigations_variation_ await base.Client_method_skip_loads_owned_navigations_variation_2(async); AssertSql( - @"@__p_0='1' + @"@__p_0='1' -SELECT [t].[Id], [t].[Discriminator], [t3].[Id], [t6].[Id], [t6].[PersonAddress_Country_Name], [t6].[PersonAddress_Country_PlanetId], [t8].[Id], [t11].[Id], [t11].[BranchAddress_Country_Name], [t11].[BranchAddress_Country_PlanetId], [t13].[Id], [t16].[Id], [t16].[LeafBAddress_Country_Name], [t16].[LeafBAddress_Country_PlanetId], [t18].[Id], [t21].[Id], [t21].[LeafAAddress_Country_Name], [t21].[LeafAAddress_Country_PlanetId], [o22].[ClientId], [o22].[Id] +SELECT [t].[Id], [t].[Discriminator], [t].[Name], [t3].[Id], [t3].[PersonAddress_AddressLine], [t3].[PersonAddress_ZipCode], [t6].[Id], [t6].[PersonAddress_Country_Name], [t6].[PersonAddress_Country_PlanetId], [t8].[Id], [t11].[Id], [t11].[BranchAddress_Country_Name], [t11].[BranchAddress_Country_PlanetId], [t13].[Id], [t16].[Id], [t16].[LeafBAddress_Country_Name], [t16].[LeafBAddress_Country_PlanetId], [t18].[Id], [t21].[Id], [t21].[LeafAAddress_Country_Name], [t21].[LeafAAddress_Country_PlanetId], [o22].[ClientId], [o22].[Id], [o22].[OrderDate] FROM ( - SELECT [o].[Id], [o].[Discriminator] + SELECT [o].[Id], [o].[Discriminator], [o].[Name] FROM [OwnedPerson] AS [o] WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ORDER BY [o].[Id] OFFSET @__p_0 ROWS ) AS [t] LEFT JOIN ( - SELECT [o0].[Id], [t0].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t0].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t0] ON [o0].[Id] = [t0].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t1] ON [t].[Id] = [t1].[Id] LEFT JOIN ( - SELECT [o2].[Id], [t2].[Id] AS [Id0] + SELECT [o2].[Id], [o2].[PersonAddress_AddressLine], [o2].[PersonAddress_ZipCode], [t2].[Id] AS [Id0] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [o3].[Discriminator] + SELECT [o3].[Id], [o3].[Discriminator], [o3].[Name] FROM [OwnedPerson] AS [o3] WHERE [o3].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t2] ON [o2].[Id] = [t2].[Id] + WHERE [o2].[PersonAddress_ZipCode] IS NOT NULL ) AS [t3] ON [t].[Id] = [t3].[Id] LEFT JOIN ( SELECT [o4].[Id], [o4].[PersonAddress_Country_Name], [o4].[PersonAddress_Country_PlanetId], [t5].[Id] AS [Id0], [t5].[Id0] AS [Id00] FROM [OwnedPerson] AS [o4] INNER JOIN ( - SELECT [o5].[Id], [t4].[Id] AS [Id0] + SELECT [o5].[Id], [o5].[PersonAddress_AddressLine], [o5].[PersonAddress_ZipCode], [t4].[Id] AS [Id0] FROM [OwnedPerson] AS [o5] INNER JOIN ( - SELECT [o6].[Id], [o6].[Discriminator] + SELECT [o6].[Id], [o6].[Discriminator], [o6].[Name] FROM [OwnedPerson] AS [o6] WHERE [o6].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t4] ON [o5].[Id] = [t4].[Id] + WHERE [o5].[PersonAddress_ZipCode] IS NOT NULL ) AS [t5] ON [o4].[Id] = [t5].[Id] WHERE [o4].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t6] ON [t3].[Id] = [t6].[Id] @@ -2057,7 +2121,7 @@ LEFT JOIN ( SELECT [o7].[Id], [t7].[Id] AS [Id0] FROM [OwnedPerson] AS [o7] INNER JOIN ( - SELECT [o8].[Id], [o8].[Discriminator] + SELECT [o8].[Id], [o8].[Discriminator], [o8].[Name] FROM [OwnedPerson] AS [o8] WHERE [o8].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t7] ON [o7].[Id] = [t7].[Id] @@ -2069,7 +2133,7 @@ INNER JOIN ( SELECT [o10].[Id], [t9].[Id] AS [Id0] FROM [OwnedPerson] AS [o10] INNER JOIN ( - SELECT [o11].[Id], [o11].[Discriminator] + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] FROM [OwnedPerson] AS [o11] WHERE [o11].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t9] ON [o10].[Id] = [t9].[Id] @@ -2080,7 +2144,7 @@ LEFT JOIN ( SELECT [o12].[Id], [t12].[Id] AS [Id0] FROM [OwnedPerson] AS [o12] INNER JOIN ( - SELECT [o13].[Id], [o13].[Discriminator] + SELECT [o13].[Id], [o13].[Discriminator], [o13].[Name] FROM [OwnedPerson] AS [o13] WHERE [o13].[Discriminator] = N'LeafB' ) AS [t12] ON [o12].[Id] = [t12].[Id] @@ -2092,7 +2156,7 @@ INNER JOIN ( SELECT [o15].[Id], [t14].[Id] AS [Id0] FROM [OwnedPerson] AS [o15] INNER JOIN ( - SELECT [o16].[Id], [o16].[Discriminator] + SELECT [o16].[Id], [o16].[Discriminator], [o16].[Name] FROM [OwnedPerson] AS [o16] WHERE [o16].[Discriminator] = N'LeafB' ) AS [t14] ON [o15].[Id] = [t14].[Id] @@ -2103,7 +2167,7 @@ LEFT JOIN ( SELECT [o17].[Id], [t17].[Id] AS [Id0] FROM [OwnedPerson] AS [o17] INNER JOIN ( - SELECT [o18].[Id], [o18].[Discriminator] + SELECT [o18].[Id], [o18].[Discriminator], [o18].[Name] FROM [OwnedPerson] AS [o18] WHERE [o18].[Discriminator] = N'LeafA' ) AS [t17] ON [o17].[Id] = [t17].[Id] @@ -2115,7 +2179,7 @@ INNER JOIN ( SELECT [o20].[Id], [t19].[Id] AS [Id0] FROM [OwnedPerson] AS [o20] INNER JOIN ( - SELECT [o21].[Id], [o21].[Discriminator] + SELECT [o21].[Id], [o21].[Discriminator], [o21].[Name] FROM [OwnedPerson] AS [o21] WHERE [o21].[Discriminator] = N'LeafA' ) AS [t19] ON [o20].[Id] = [t19].[Id] @@ -2133,42 +2197,45 @@ public override async Task Client_method_take_loads_owned_navigations_variation_ AssertSql( @"@__p_0='2' -SELECT [t].[Id], [t].[Discriminator], [t3].[Id], [t6].[Id], [t6].[PersonAddress_Country_Name], [t6].[PersonAddress_Country_PlanetId], [t8].[Id], [t11].[Id], [t11].[BranchAddress_Country_Name], [t11].[BranchAddress_Country_PlanetId], [t13].[Id], [t16].[Id], [t16].[LeafBAddress_Country_Name], [t16].[LeafBAddress_Country_PlanetId], [t18].[Id], [t21].[Id], [t21].[LeafAAddress_Country_Name], [t21].[LeafAAddress_Country_PlanetId], [o22].[ClientId], [o22].[Id] +SELECT [t].[Id], [t].[Discriminator], [t].[Name], [t3].[Id], [t3].[PersonAddress_AddressLine], [t3].[PersonAddress_ZipCode], [t6].[Id], [t6].[PersonAddress_Country_Name], [t6].[PersonAddress_Country_PlanetId], [t8].[Id], [t11].[Id], [t11].[BranchAddress_Country_Name], [t11].[BranchAddress_Country_PlanetId], [t13].[Id], [t16].[Id], [t16].[LeafBAddress_Country_Name], [t16].[LeafBAddress_Country_PlanetId], [t18].[Id], [t21].[Id], [t21].[LeafAAddress_Country_Name], [t21].[LeafAAddress_Country_PlanetId], [o22].[ClientId], [o22].[Id], [o22].[OrderDate] FROM ( - SELECT TOP(@__p_0) [o].[Id], [o].[Discriminator] + SELECT TOP(@__p_0) [o].[Id], [o].[Discriminator], [o].[Name] FROM [OwnedPerson] AS [o] WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ORDER BY [o].[Id] ) AS [t] LEFT JOIN ( - SELECT [o0].[Id], [t0].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t0].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t0] ON [o0].[Id] = [t0].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t1] ON [t].[Id] = [t1].[Id] LEFT JOIN ( - SELECT [o2].[Id], [t2].[Id] AS [Id0] + SELECT [o2].[Id], [o2].[PersonAddress_AddressLine], [o2].[PersonAddress_ZipCode], [t2].[Id] AS [Id0] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [o3].[Discriminator] + SELECT [o3].[Id], [o3].[Discriminator], [o3].[Name] FROM [OwnedPerson] AS [o3] WHERE [o3].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t2] ON [o2].[Id] = [t2].[Id] + WHERE [o2].[PersonAddress_ZipCode] IS NOT NULL ) AS [t3] ON [t].[Id] = [t3].[Id] LEFT JOIN ( SELECT [o4].[Id], [o4].[PersonAddress_Country_Name], [o4].[PersonAddress_Country_PlanetId], [t5].[Id] AS [Id0], [t5].[Id0] AS [Id00] FROM [OwnedPerson] AS [o4] INNER JOIN ( - SELECT [o5].[Id], [t4].[Id] AS [Id0] + SELECT [o5].[Id], [o5].[PersonAddress_AddressLine], [o5].[PersonAddress_ZipCode], [t4].[Id] AS [Id0] FROM [OwnedPerson] AS [o5] INNER JOIN ( - SELECT [o6].[Id], [o6].[Discriminator] + SELECT [o6].[Id], [o6].[Discriminator], [o6].[Name] FROM [OwnedPerson] AS [o6] WHERE [o6].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t4] ON [o5].[Id] = [t4].[Id] + WHERE [o5].[PersonAddress_ZipCode] IS NOT NULL ) AS [t5] ON [o4].[Id] = [t5].[Id] WHERE [o4].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t6] ON [t3].[Id] = [t6].[Id] @@ -2176,7 +2243,7 @@ LEFT JOIN ( SELECT [o7].[Id], [t7].[Id] AS [Id0] FROM [OwnedPerson] AS [o7] INNER JOIN ( - SELECT [o8].[Id], [o8].[Discriminator] + SELECT [o8].[Id], [o8].[Discriminator], [o8].[Name] FROM [OwnedPerson] AS [o8] WHERE [o8].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t7] ON [o7].[Id] = [t7].[Id] @@ -2188,7 +2255,7 @@ INNER JOIN ( SELECT [o10].[Id], [t9].[Id] AS [Id0] FROM [OwnedPerson] AS [o10] INNER JOIN ( - SELECT [o11].[Id], [o11].[Discriminator] + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] FROM [OwnedPerson] AS [o11] WHERE [o11].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t9] ON [o10].[Id] = [t9].[Id] @@ -2199,7 +2266,7 @@ LEFT JOIN ( SELECT [o12].[Id], [t12].[Id] AS [Id0] FROM [OwnedPerson] AS [o12] INNER JOIN ( - SELECT [o13].[Id], [o13].[Discriminator] + SELECT [o13].[Id], [o13].[Discriminator], [o13].[Name] FROM [OwnedPerson] AS [o13] WHERE [o13].[Discriminator] = N'LeafB' ) AS [t12] ON [o12].[Id] = [t12].[Id] @@ -2211,7 +2278,7 @@ INNER JOIN ( SELECT [o15].[Id], [t14].[Id] AS [Id0] FROM [OwnedPerson] AS [o15] INNER JOIN ( - SELECT [o16].[Id], [o16].[Discriminator] + SELECT [o16].[Id], [o16].[Discriminator], [o16].[Name] FROM [OwnedPerson] AS [o16] WHERE [o16].[Discriminator] = N'LeafB' ) AS [t14] ON [o15].[Id] = [t14].[Id] @@ -2222,7 +2289,7 @@ LEFT JOIN ( SELECT [o17].[Id], [t17].[Id] AS [Id0] FROM [OwnedPerson] AS [o17] INNER JOIN ( - SELECT [o18].[Id], [o18].[Discriminator] + SELECT [o18].[Id], [o18].[Discriminator], [o18].[Name] FROM [OwnedPerson] AS [o18] WHERE [o18].[Discriminator] = N'LeafA' ) AS [t17] ON [o17].[Id] = [t17].[Id] @@ -2234,7 +2301,7 @@ INNER JOIN ( SELECT [o20].[Id], [t19].[Id] AS [Id0] FROM [OwnedPerson] AS [o20] INNER JOIN ( - SELECT [o21].[Id], [o21].[Discriminator] + SELECT [o21].[Id], [o21].[Discriminator], [o21].[Name] FROM [OwnedPerson] AS [o21] WHERE [o21].[Discriminator] = N'LeafA' ) AS [t19] ON [o20].[Id] = [t19].[Id] @@ -2253,43 +2320,46 @@ public override async Task Client_method_skip_take_loads_owned_navigations_varia @"@__p_0='1' @__p_1='2' -SELECT [t].[Id], [t].[Discriminator], [t3].[Id], [t6].[Id], [t6].[PersonAddress_Country_Name], [t6].[PersonAddress_Country_PlanetId], [t8].[Id], [t11].[Id], [t11].[BranchAddress_Country_Name], [t11].[BranchAddress_Country_PlanetId], [t13].[Id], [t16].[Id], [t16].[LeafBAddress_Country_Name], [t16].[LeafBAddress_Country_PlanetId], [t18].[Id], [t21].[Id], [t21].[LeafAAddress_Country_Name], [t21].[LeafAAddress_Country_PlanetId], [o22].[ClientId], [o22].[Id] +SELECT [t].[Id], [t].[Discriminator], [t].[Name], [t3].[Id], [t3].[PersonAddress_AddressLine], [t3].[PersonAddress_ZipCode], [t6].[Id], [t6].[PersonAddress_Country_Name], [t6].[PersonAddress_Country_PlanetId], [t8].[Id], [t11].[Id], [t11].[BranchAddress_Country_Name], [t11].[BranchAddress_Country_PlanetId], [t13].[Id], [t16].[Id], [t16].[LeafBAddress_Country_Name], [t16].[LeafBAddress_Country_PlanetId], [t18].[Id], [t21].[Id], [t21].[LeafAAddress_Country_Name], [t21].[LeafAAddress_Country_PlanetId], [o22].[ClientId], [o22].[Id], [o22].[OrderDate] FROM ( - SELECT [o].[Id], [o].[Discriminator] + SELECT [o].[Id], [o].[Discriminator], [o].[Name] FROM [OwnedPerson] AS [o] WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ORDER BY [o].[Id] OFFSET @__p_0 ROWS FETCH NEXT @__p_1 ROWS ONLY ) AS [t] LEFT JOIN ( - SELECT [o0].[Id], [t0].[Id] AS [Id0] + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t0].[Id] AS [Id0] FROM [OwnedPerson] AS [o0] INNER JOIN ( - SELECT [o1].[Id], [o1].[Discriminator] + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] FROM [OwnedPerson] AS [o1] WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t0] ON [o0].[Id] = [t0].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL ) AS [t1] ON [t].[Id] = [t1].[Id] LEFT JOIN ( - SELECT [o2].[Id], [t2].[Id] AS [Id0] + SELECT [o2].[Id], [o2].[PersonAddress_AddressLine], [o2].[PersonAddress_ZipCode], [t2].[Id] AS [Id0] FROM [OwnedPerson] AS [o2] INNER JOIN ( - SELECT [o3].[Id], [o3].[Discriminator] + SELECT [o3].[Id], [o3].[Discriminator], [o3].[Name] FROM [OwnedPerson] AS [o3] WHERE [o3].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t2] ON [o2].[Id] = [t2].[Id] + WHERE [o2].[PersonAddress_ZipCode] IS NOT NULL ) AS [t3] ON [t].[Id] = [t3].[Id] LEFT JOIN ( SELECT [o4].[Id], [o4].[PersonAddress_Country_Name], [o4].[PersonAddress_Country_PlanetId], [t5].[Id] AS [Id0], [t5].[Id0] AS [Id00] FROM [OwnedPerson] AS [o4] INNER JOIN ( - SELECT [o5].[Id], [t4].[Id] AS [Id0] + SELECT [o5].[Id], [o5].[PersonAddress_AddressLine], [o5].[PersonAddress_ZipCode], [t4].[Id] AS [Id0] FROM [OwnedPerson] AS [o5] INNER JOIN ( - SELECT [o6].[Id], [o6].[Discriminator] + SELECT [o6].[Id], [o6].[Discriminator], [o6].[Name] FROM [OwnedPerson] AS [o6] WHERE [o6].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') ) AS [t4] ON [o5].[Id] = [t4].[Id] + WHERE [o5].[PersonAddress_ZipCode] IS NOT NULL ) AS [t5] ON [o4].[Id] = [t5].[Id] WHERE [o4].[PersonAddress_Country_PlanetId] IS NOT NULL ) AS [t6] ON [t3].[Id] = [t6].[Id] @@ -2297,7 +2367,7 @@ LEFT JOIN ( SELECT [o7].[Id], [t7].[Id] AS [Id0] FROM [OwnedPerson] AS [o7] INNER JOIN ( - SELECT [o8].[Id], [o8].[Discriminator] + SELECT [o8].[Id], [o8].[Discriminator], [o8].[Name] FROM [OwnedPerson] AS [o8] WHERE [o8].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t7] ON [o7].[Id] = [t7].[Id] @@ -2309,7 +2379,7 @@ INNER JOIN ( SELECT [o10].[Id], [t9].[Id] AS [Id0] FROM [OwnedPerson] AS [o10] INNER JOIN ( - SELECT [o11].[Id], [o11].[Discriminator] + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] FROM [OwnedPerson] AS [o11] WHERE [o11].[Discriminator] IN (N'Branch', N'LeafA') ) AS [t9] ON [o10].[Id] = [t9].[Id] @@ -2320,7 +2390,7 @@ LEFT JOIN ( SELECT [o12].[Id], [t12].[Id] AS [Id0] FROM [OwnedPerson] AS [o12] INNER JOIN ( - SELECT [o13].[Id], [o13].[Discriminator] + SELECT [o13].[Id], [o13].[Discriminator], [o13].[Name] FROM [OwnedPerson] AS [o13] WHERE [o13].[Discriminator] = N'LeafB' ) AS [t12] ON [o12].[Id] = [t12].[Id] @@ -2332,7 +2402,7 @@ INNER JOIN ( SELECT [o15].[Id], [t14].[Id] AS [Id0] FROM [OwnedPerson] AS [o15] INNER JOIN ( - SELECT [o16].[Id], [o16].[Discriminator] + SELECT [o16].[Id], [o16].[Discriminator], [o16].[Name] FROM [OwnedPerson] AS [o16] WHERE [o16].[Discriminator] = N'LeafB' ) AS [t14] ON [o15].[Id] = [t14].[Id] @@ -2343,7 +2413,7 @@ LEFT JOIN ( SELECT [o17].[Id], [t17].[Id] AS [Id0] FROM [OwnedPerson] AS [o17] INNER JOIN ( - SELECT [o18].[Id], [o18].[Discriminator] + SELECT [o18].[Id], [o18].[Discriminator], [o18].[Name] FROM [OwnedPerson] AS [o18] WHERE [o18].[Discriminator] = N'LeafA' ) AS [t17] ON [o17].[Id] = [t17].[Id] @@ -2355,7 +2425,7 @@ INNER JOIN ( SELECT [o20].[Id], [t19].[Id] AS [Id0] FROM [OwnedPerson] AS [o20] INNER JOIN ( - SELECT [o21].[Id], [o21].[Discriminator] + SELECT [o21].[Id], [o21].[Discriminator], [o21].[Name] FROM [OwnedPerson] AS [o21] WHERE [o21].[Discriminator] = N'LeafA' ) AS [t19] ON [o20].[Id] = [t19].[Id] @@ -2371,7 +2441,7 @@ public override async Task Where_owned_collection_navigation_ToList_Count(bool a await base.Where_owned_collection_navigation_ToList_Count(async); AssertSql( - @"SELECT [o].[Id], [o0].[ClientId], [o0].[Id] + @"SELECT [o].[Id], [o0].[ClientId], [o0].[Id], [o0].[OrderDate] FROM [OwnedPerson] AS [o] LEFT JOIN [Order] AS [o0] ON [o].[Id] = [o0].[ClientId] WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') AND (( @@ -2386,7 +2456,7 @@ public override async Task Where_collection_navigation_ToArray_Count(bool async) await base.Where_collection_navigation_ToArray_Count(async); AssertSql( - @"SELECT [o].[Id], [o0].[ClientId], [o0].[Id] + @"SELECT [o].[Id], [o0].[ClientId], [o0].[Id], [o0].[OrderDate] FROM [OwnedPerson] AS [o] LEFT JOIN [Order] AS [o0] ON ([o].[Id] = [o0].[ClientId]) AND ([o].[Id] = [o0].[ClientId]) WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') AND (( @@ -2401,7 +2471,7 @@ public override async Task Where_collection_navigation_AsEnumerable_Count(bool a await base.Where_collection_navigation_AsEnumerable_Count(async); AssertSql( - @"SELECT [o].[Id], [o0].[ClientId], [o0].[Id] + @"SELECT [o].[Id], [o0].[ClientId], [o0].[Id], [o0].[OrderDate] FROM [OwnedPerson] AS [o] LEFT JOIN [Order] AS [o0] ON [o].[Id] = [o0].[ClientId] WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') AND (( @@ -2416,7 +2486,7 @@ public override async Task Where_collection_navigation_ToList_Count_member(bool await base.Where_collection_navigation_ToList_Count_member(async); AssertSql( - @"SELECT [o].[Id], [o0].[ClientId], [o0].[Id] + @"SELECT [o].[Id], [o0].[ClientId], [o0].[Id], [o0].[OrderDate] FROM [OwnedPerson] AS [o] LEFT JOIN [Order] AS [o0] ON [o].[Id] = [o0].[ClientId] WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') AND (( @@ -2433,8 +2503,542 @@ public override async Task Where_collection_navigation_ToArray_Length_member(boo AssertSql(" "); } + public override async Task Can_query_on_indexer_properties(bool async) + { + await base.Can_query_on_indexer_properties(async); + + AssertSql( + @"SELECT [o].[Id], [o].[Discriminator], [o].[Name], [t0].[Id], [t0].[PersonAddress_AddressLine], [t0].[PersonAddress_ZipCode], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [t5].[Id], [t8].[Id], [t8].[BranchAddress_Country_Name], [t8].[BranchAddress_Country_PlanetId], [t10].[Id], [t13].[Id], [t13].[LeafBAddress_Country_Name], [t13].[LeafBAddress_Country_PlanetId], [t15].[Id], [t18].[Id], [t18].[LeafAAddress_Country_Name], [t18].[LeafAAddress_Country_PlanetId], [o20].[ClientId], [o20].[Id], [o20].[OrderDate] +FROM [OwnedPerson] AS [o] +LEFT JOIN ( + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] + FROM [OwnedPerson] AS [o0] + INNER JOIN ( + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] + FROM [OwnedPerson] AS [o1] + WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') + ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL +) AS [t0] ON [o].[Id] = [t0].[Id] +LEFT JOIN ( + SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] + FROM [OwnedPerson] AS [o2] + INNER JOIN ( + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] + FROM [OwnedPerson] AS [o3] + INNER JOIN ( + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] + FROM [OwnedPerson] AS [o4] + WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') + ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL + ) AS [t2] ON [o2].[Id] = [t2].[Id] + WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL +) AS [t3] ON [t0].[Id] = [t3].[Id] +LEFT JOIN ( + SELECT [o5].[Id], [t4].[Id] AS [Id0] + FROM [OwnedPerson] AS [o5] + INNER JOIN ( + SELECT [o6].[Id], [o6].[Discriminator], [o6].[Name] + FROM [OwnedPerson] AS [o6] + WHERE [o6].[Discriminator] IN (N'Branch', N'LeafA') + ) AS [t4] ON [o5].[Id] = [t4].[Id] +) AS [t5] ON [o].[Id] = [t5].[Id] +LEFT JOIN ( + SELECT [o7].[Id], [o7].[BranchAddress_Country_Name], [o7].[BranchAddress_Country_PlanetId], [t7].[Id] AS [Id0], [t7].[Id0] AS [Id00] + FROM [OwnedPerson] AS [o7] + INNER JOIN ( + SELECT [o8].[Id], [t6].[Id] AS [Id0] + FROM [OwnedPerson] AS [o8] + INNER JOIN ( + SELECT [o9].[Id], [o9].[Discriminator], [o9].[Name] + FROM [OwnedPerson] AS [o9] + WHERE [o9].[Discriminator] IN (N'Branch', N'LeafA') + ) AS [t6] ON [o8].[Id] = [t6].[Id] + ) AS [t7] ON [o7].[Id] = [t7].[Id] + WHERE [o7].[BranchAddress_Country_PlanetId] IS NOT NULL +) AS [t8] ON [t5].[Id] = [t8].[Id] +LEFT JOIN ( + SELECT [o10].[Id], [t9].[Id] AS [Id0] + FROM [OwnedPerson] AS [o10] + INNER JOIN ( + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] + FROM [OwnedPerson] AS [o11] + WHERE [o11].[Discriminator] = N'LeafB' + ) AS [t9] ON [o10].[Id] = [t9].[Id] +) AS [t10] ON [o].[Id] = [t10].[Id] +LEFT JOIN ( + SELECT [o12].[Id], [o12].[LeafBAddress_Country_Name], [o12].[LeafBAddress_Country_PlanetId], [t12].[Id] AS [Id0], [t12].[Id0] AS [Id00] + FROM [OwnedPerson] AS [o12] + INNER JOIN ( + SELECT [o13].[Id], [t11].[Id] AS [Id0] + FROM [OwnedPerson] AS [o13] + INNER JOIN ( + SELECT [o14].[Id], [o14].[Discriminator], [o14].[Name] + FROM [OwnedPerson] AS [o14] + WHERE [o14].[Discriminator] = N'LeafB' + ) AS [t11] ON [o13].[Id] = [t11].[Id] + ) AS [t12] ON [o12].[Id] = [t12].[Id] + WHERE [o12].[LeafBAddress_Country_PlanetId] IS NOT NULL +) AS [t13] ON [t10].[Id] = [t13].[Id] +LEFT JOIN ( + SELECT [o15].[Id], [t14].[Id] AS [Id0] + FROM [OwnedPerson] AS [o15] + INNER JOIN ( + SELECT [o16].[Id], [o16].[Discriminator], [o16].[Name] + FROM [OwnedPerson] AS [o16] + WHERE [o16].[Discriminator] = N'LeafA' + ) AS [t14] ON [o15].[Id] = [t14].[Id] +) AS [t15] ON [o].[Id] = [t15].[Id] +LEFT JOIN ( + SELECT [o17].[Id], [o17].[LeafAAddress_Country_Name], [o17].[LeafAAddress_Country_PlanetId], [t17].[Id] AS [Id0], [t17].[Id0] AS [Id00] + FROM [OwnedPerson] AS [o17] + INNER JOIN ( + SELECT [o18].[Id], [t16].[Id] AS [Id0] + FROM [OwnedPerson] AS [o18] + INNER JOIN ( + SELECT [o19].[Id], [o19].[Discriminator], [o19].[Name] + FROM [OwnedPerson] AS [o19] + WHERE [o19].[Discriminator] = N'LeafA' + ) AS [t16] ON [o18].[Id] = [t16].[Id] + ) AS [t17] ON [o17].[Id] = [t17].[Id] + WHERE [o17].[LeafAAddress_Country_PlanetId] IS NOT NULL +) AS [t18] ON [t15].[Id] = [t18].[Id] +LEFT JOIN [Order] AS [o20] ON [o].[Id] = [o20].[ClientId] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') AND ([o].[Name] = N'Mona Cy') +ORDER BY [o].[Id], [o20].[ClientId], [o20].[Id]"); + } + + public override async Task Can_query_on_owned_indexer_properties(bool async) + { + await base.Can_query_on_owned_indexer_properties(async); + AssertSql( + @"SELECT [o].[Name] +FROM [OwnedPerson] AS [o] +LEFT JOIN ( + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] + FROM [OwnedPerson] AS [o0] + INNER JOIN ( + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] + FROM [OwnedPerson] AS [o1] + WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') + ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL +) AS [t0] ON [o].[Id] = [t0].[Id] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') AND ([t0].[PersonAddress_ZipCode] = 38654)"); + } + + public override async Task Can_query_on_indexer_property_when_property_name_from_closure(bool async) + { + await base.Can_query_on_indexer_property_when_property_name_from_closure(async); + + AssertSql( + @"SELECT [o].[Name] +FROM [OwnedPerson] AS [o] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') AND ([o].[Name] = N'Mona Cy')"); + } + + public override async Task Can_project_indexer_properties(bool async) + { + await base.Can_project_indexer_properties(async); + + AssertSql( + @"SELECT [o].[Name] +FROM [OwnedPerson] AS [o] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA')"); + } + + public override async Task Can_project_owned_indexer_properties(bool async) + { + await base.Can_project_owned_indexer_properties(async); + + AssertSql( + @"SELECT [t0].[PersonAddress_AddressLine] +FROM [OwnedPerson] AS [o] +LEFT JOIN ( + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] + FROM [OwnedPerson] AS [o0] + INNER JOIN ( + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] + FROM [OwnedPerson] AS [o1] + WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') + ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL +) AS [t0] ON [o].[Id] = [t0].[Id] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA')"); + } + + public override async Task Can_project_indexer_properties_converted(bool async) + { + await base.Can_project_indexer_properties_converted(async); + + AssertSql( + @"SELECT [o].[Name] +FROM [OwnedPerson] AS [o] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA')"); + } + + public override async Task Can_project_owned_indexer_properties_converted(bool async) + { + await base.Can_project_owned_indexer_properties_converted(async); + + AssertSql( + @"SELECT [t0].[PersonAddress_AddressLine] +FROM [OwnedPerson] AS [o] +LEFT JOIN ( + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] + FROM [OwnedPerson] AS [o0] + INNER JOIN ( + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] + FROM [OwnedPerson] AS [o1] + WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') + ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL +) AS [t0] ON [o].[Id] = [t0].[Id] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA')"); + } + + public override async Task Can_OrderBy_indexer_properties(bool async) + { + await base.Can_OrderBy_indexer_properties(async); + + AssertSql( + @"SELECT [o].[Id], [o].[Discriminator], [o].[Name], [t0].[Id], [t0].[PersonAddress_AddressLine], [t0].[PersonAddress_ZipCode], [t3].[Id], [t3].[PersonAddress_Country_Name], [t3].[PersonAddress_Country_PlanetId], [t5].[Id], [t8].[Id], [t8].[BranchAddress_Country_Name], [t8].[BranchAddress_Country_PlanetId], [t10].[Id], [t13].[Id], [t13].[LeafBAddress_Country_Name], [t13].[LeafBAddress_Country_PlanetId], [t15].[Id], [t18].[Id], [t18].[LeafAAddress_Country_Name], [t18].[LeafAAddress_Country_PlanetId], [o20].[ClientId], [o20].[Id], [o20].[OrderDate] +FROM [OwnedPerson] AS [o] +LEFT JOIN ( + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] + FROM [OwnedPerson] AS [o0] + INNER JOIN ( + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] + FROM [OwnedPerson] AS [o1] + WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') + ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL +) AS [t0] ON [o].[Id] = [t0].[Id] +LEFT JOIN ( + SELECT [o2].[Id], [o2].[PersonAddress_Country_Name], [o2].[PersonAddress_Country_PlanetId], [t2].[Id] AS [Id0], [t2].[Id0] AS [Id00] + FROM [OwnedPerson] AS [o2] + INNER JOIN ( + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] + FROM [OwnedPerson] AS [o3] + INNER JOIN ( + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] + FROM [OwnedPerson] AS [o4] + WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') + ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL + ) AS [t2] ON [o2].[Id] = [t2].[Id] + WHERE [o2].[PersonAddress_Country_PlanetId] IS NOT NULL +) AS [t3] ON [t0].[Id] = [t3].[Id] +LEFT JOIN ( + SELECT [o5].[Id], [t4].[Id] AS [Id0] + FROM [OwnedPerson] AS [o5] + INNER JOIN ( + SELECT [o6].[Id], [o6].[Discriminator], [o6].[Name] + FROM [OwnedPerson] AS [o6] + WHERE [o6].[Discriminator] IN (N'Branch', N'LeafA') + ) AS [t4] ON [o5].[Id] = [t4].[Id] +) AS [t5] ON [o].[Id] = [t5].[Id] +LEFT JOIN ( + SELECT [o7].[Id], [o7].[BranchAddress_Country_Name], [o7].[BranchAddress_Country_PlanetId], [t7].[Id] AS [Id0], [t7].[Id0] AS [Id00] + FROM [OwnedPerson] AS [o7] + INNER JOIN ( + SELECT [o8].[Id], [t6].[Id] AS [Id0] + FROM [OwnedPerson] AS [o8] + INNER JOIN ( + SELECT [o9].[Id], [o9].[Discriminator], [o9].[Name] + FROM [OwnedPerson] AS [o9] + WHERE [o9].[Discriminator] IN (N'Branch', N'LeafA') + ) AS [t6] ON [o8].[Id] = [t6].[Id] + ) AS [t7] ON [o7].[Id] = [t7].[Id] + WHERE [o7].[BranchAddress_Country_PlanetId] IS NOT NULL +) AS [t8] ON [t5].[Id] = [t8].[Id] +LEFT JOIN ( + SELECT [o10].[Id], [t9].[Id] AS [Id0] + FROM [OwnedPerson] AS [o10] + INNER JOIN ( + SELECT [o11].[Id], [o11].[Discriminator], [o11].[Name] + FROM [OwnedPerson] AS [o11] + WHERE [o11].[Discriminator] = N'LeafB' + ) AS [t9] ON [o10].[Id] = [t9].[Id] +) AS [t10] ON [o].[Id] = [t10].[Id] +LEFT JOIN ( + SELECT [o12].[Id], [o12].[LeafBAddress_Country_Name], [o12].[LeafBAddress_Country_PlanetId], [t12].[Id] AS [Id0], [t12].[Id0] AS [Id00] + FROM [OwnedPerson] AS [o12] + INNER JOIN ( + SELECT [o13].[Id], [t11].[Id] AS [Id0] + FROM [OwnedPerson] AS [o13] + INNER JOIN ( + SELECT [o14].[Id], [o14].[Discriminator], [o14].[Name] + FROM [OwnedPerson] AS [o14] + WHERE [o14].[Discriminator] = N'LeafB' + ) AS [t11] ON [o13].[Id] = [t11].[Id] + ) AS [t12] ON [o12].[Id] = [t12].[Id] + WHERE [o12].[LeafBAddress_Country_PlanetId] IS NOT NULL +) AS [t13] ON [t10].[Id] = [t13].[Id] +LEFT JOIN ( + SELECT [o15].[Id], [t14].[Id] AS [Id0] + FROM [OwnedPerson] AS [o15] + INNER JOIN ( + SELECT [o16].[Id], [o16].[Discriminator], [o16].[Name] + FROM [OwnedPerson] AS [o16] + WHERE [o16].[Discriminator] = N'LeafA' + ) AS [t14] ON [o15].[Id] = [t14].[Id] +) AS [t15] ON [o].[Id] = [t15].[Id] +LEFT JOIN ( + SELECT [o17].[Id], [o17].[LeafAAddress_Country_Name], [o17].[LeafAAddress_Country_PlanetId], [t17].[Id] AS [Id0], [t17].[Id0] AS [Id00] + FROM [OwnedPerson] AS [o17] + INNER JOIN ( + SELECT [o18].[Id], [t16].[Id] AS [Id0] + FROM [OwnedPerson] AS [o18] + INNER JOIN ( + SELECT [o19].[Id], [o19].[Discriminator], [o19].[Name] + FROM [OwnedPerson] AS [o19] + WHERE [o19].[Discriminator] = N'LeafA' + ) AS [t16] ON [o18].[Id] = [t16].[Id] + ) AS [t17] ON [o17].[Id] = [t17].[Id] + WHERE [o17].[LeafAAddress_Country_PlanetId] IS NOT NULL +) AS [t18] ON [t15].[Id] = [t18].[Id] +LEFT JOIN [Order] AS [o20] ON [o].[Id] = [o20].[ClientId] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') +ORDER BY [o].[Name], [o].[Id], [o20].[ClientId], [o20].[Id]"); + } + + public override async Task Can_OrderBy_indexer_properties_converted(bool async) + { + await base.Can_OrderBy_indexer_properties_converted(async); + + AssertSql( + @"SELECT [o].[Name] +FROM [OwnedPerson] AS [o] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') +ORDER BY [o].[Name], [o].[Id]"); + } + + public override async Task Can_OrderBy_owned_indexer_properties(bool async) + { + await base.Can_OrderBy_owned_indexer_properties(async); + + AssertSql( + @"SELECT [o].[Name] +FROM [OwnedPerson] AS [o] +LEFT JOIN ( + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] + FROM [OwnedPerson] AS [o0] + INNER JOIN ( + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] + FROM [OwnedPerson] AS [o1] + WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') + ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL +) AS [t0] ON [o].[Id] = [t0].[Id] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') +ORDER BY [t0].[PersonAddress_ZipCode], [o].[Id]"); + } + + public override async Task Can_OrderBy_owened_indexer_properties_converted(bool async) + { + await base.Can_OrderBy_owened_indexer_properties_converted(async); + + AssertSql( + @"SELECT [o].[Name] +FROM [OwnedPerson] AS [o] +LEFT JOIN ( + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] + FROM [OwnedPerson] AS [o0] + INNER JOIN ( + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] + FROM [OwnedPerson] AS [o1] + WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') + ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL +) AS [t0] ON [o].[Id] = [t0].[Id] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') +ORDER BY [t0].[PersonAddress_ZipCode], [o].[Id]"); + } + + public override async Task Can_group_by_indexer_property(bool isAsync) + { + await base.Can_group_by_indexer_property(isAsync); + + AssertSql( + @"SELECT COUNT(*) +FROM [OwnedPerson] AS [o] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') +GROUP BY [o].[Name]"); + } + + public override async Task Can_group_by_converted_indexer_property(bool isAsync) + { + await base.Can_group_by_converted_indexer_property(isAsync); + + AssertSql( + @"SELECT COUNT(*) +FROM [OwnedPerson] AS [o] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') +GROUP BY [o].[Name]"); + } + + public override async Task Can_group_by_owned_indexer_property(bool isAsync) + { + await base.Can_group_by_owned_indexer_property(isAsync); + + AssertSql( + @"SELECT COUNT(*) +FROM [OwnedPerson] AS [o] +LEFT JOIN ( + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] + FROM [OwnedPerson] AS [o0] + INNER JOIN ( + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] + FROM [OwnedPerson] AS [o1] + WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') + ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL +) AS [t0] ON [o].[Id] = [t0].[Id] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') +GROUP BY [t0].[PersonAddress_ZipCode]"); + } + + public override async Task Can_group_by_converted_owned_indexer_property(bool isAsync) + { + await base.Can_group_by_converted_owned_indexer_property(isAsync); + + AssertSql( + @"SELECT COUNT(*) +FROM [OwnedPerson] AS [o] +LEFT JOIN ( + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] + FROM [OwnedPerson] AS [o0] + INNER JOIN ( + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] + FROM [OwnedPerson] AS [o1] + WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') + ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL +) AS [t0] ON [o].[Id] = [t0].[Id] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') +GROUP BY [t0].[PersonAddress_ZipCode]"); + } + + public override async Task Can_join_on_indexer_property_on_query(bool isAsync) + { + await base.Can_join_on_indexer_property_on_query(isAsync); + + AssertSql( + @"SELECT [o].[Id], [t6].[PersonAddress_Country_Name] AS [Name] +FROM [OwnedPerson] AS [o] +LEFT JOIN ( + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] + FROM [OwnedPerson] AS [o0] + INNER JOIN ( + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] + FROM [OwnedPerson] AS [o1] + WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') + ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL +) AS [t0] ON [o].[Id] = [t0].[Id] +INNER JOIN ( + SELECT [o2].[Id], [o2].[Discriminator], [o2].[Name], [t2].[Id] AS [Id0], [t2].[PersonAddress_AddressLine], [t2].[PersonAddress_ZipCode] + FROM [OwnedPerson] AS [o2] + LEFT JOIN ( + SELECT [o3].[Id], [o3].[PersonAddress_AddressLine], [o3].[PersonAddress_ZipCode], [t1].[Id] AS [Id0] + FROM [OwnedPerson] AS [o3] + INNER JOIN ( + SELECT [o4].[Id], [o4].[Discriminator], [o4].[Name] + FROM [OwnedPerson] AS [o4] + WHERE [o4].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') + ) AS [t1] ON [o3].[Id] = [t1].[Id] + WHERE [o3].[PersonAddress_ZipCode] IS NOT NULL + ) AS [t2] ON [o2].[Id] = [t2].[Id] + WHERE [o2].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') +) AS [t3] ON [t0].[PersonAddress_ZipCode] = [t3].[PersonAddress_ZipCode] +LEFT JOIN ( + SELECT [o5].[Id], [o5].[PersonAddress_Country_Name], [o5].[PersonAddress_Country_PlanetId], [t5].[Id] AS [Id0], [t5].[Id0] AS [Id00] + FROM [OwnedPerson] AS [o5] + INNER JOIN ( + SELECT [o6].[Id], [o6].[PersonAddress_AddressLine], [o6].[PersonAddress_ZipCode], [t4].[Id] AS [Id0] + FROM [OwnedPerson] AS [o6] + INNER JOIN ( + SELECT [o7].[Id], [o7].[Discriminator], [o7].[Name] + FROM [OwnedPerson] AS [o7] + WHERE [o7].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') + ) AS [t4] ON [o6].[Id] = [t4].[Id] + WHERE [o6].[PersonAddress_ZipCode] IS NOT NULL + ) AS [t5] ON [o5].[Id] = [t5].[Id] + WHERE [o5].[PersonAddress_Country_PlanetId] IS NOT NULL +) AS [t6] ON [t3].[Id0] = [t6].[Id] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA')"); + } + + public override async Task Projecting_indexer_property_ignores_include(bool isAsync) + { + await base.Projecting_indexer_property_ignores_include(isAsync); + + AssertSql( + @"SELECT [t0].[PersonAddress_ZipCode] AS [Nation] +FROM [OwnedPerson] AS [o] +LEFT JOIN ( + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] + FROM [OwnedPerson] AS [o0] + INNER JOIN ( + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] + FROM [OwnedPerson] AS [o1] + WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') + ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL +) AS [t0] ON [o].[Id] = [t0].[Id] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA')"); + } + + public override async Task Projecting_indexer_property_ignores_include_converted(bool isAsync) + { + await base.Projecting_indexer_property_ignores_include_converted(isAsync); + + AssertSql( + @"SELECT [t0].[PersonAddress_ZipCode] AS [Nation] +FROM [OwnedPerson] AS [o] +LEFT JOIN ( + SELECT [o0].[Id], [o0].[PersonAddress_AddressLine], [o0].[PersonAddress_ZipCode], [t].[Id] AS [Id0] + FROM [OwnedPerson] AS [o0] + INNER JOIN ( + SELECT [o1].[Id], [o1].[Discriminator], [o1].[Name] + FROM [OwnedPerson] AS [o1] + WHERE [o1].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') + ) AS [t] ON [o0].[Id] = [t].[Id] + WHERE [o0].[PersonAddress_ZipCode] IS NOT NULL +) AS [t0] ON [o].[Id] = [t0].[Id] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA')"); + } + + public override async Task Indexer_property_is_pushdown_into_subquery(bool isAsync) + { + await base.Indexer_property_is_pushdown_into_subquery(isAsync); + + AssertSql( + @"SELECT [o].[Name] +FROM [OwnedPerson] AS [o] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') AND (( + SELECT TOP(1) [o0].[Name] + FROM [OwnedPerson] AS [o0] + WHERE [o0].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') AND ([o0].[Id] = [o].[Id])) = N'Mona Cy')"); + } + + public override async Task Can_query_indexer_property_on_owned_collection(bool isAsync) + { + await base.Can_query_indexer_property_on_owned_collection(isAsync); + + AssertSql( + @"SELECT [o].[Name] +FROM [OwnedPerson] AS [o] +WHERE [o].[Discriminator] IN (N'OwnedPerson', N'Branch', N'LeafB', N'LeafA') AND (( + SELECT COUNT(*) + FROM [Order] AS [o0] + WHERE ([o].[Id] = [o0].[ClientId]) AND (DATEPART(year, [o0].[OrderDate]) = 2018)) = 1)"); + } + private void AssertSql(params string[] expected) - => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); + => Fixture.TestSqlLoggerFactory.AssertBaseline(expected); public class OwnedQuerySqlServerFixture : RelationalOwnedQueryFixture { diff --git a/test/EFCore.Tests/Metadata/Internal/EntityTypeTest.cs b/test/EFCore.Tests/Metadata/Internal/EntityTypeTest.cs index e59b57723fa..8091cab0088 100644 --- a/test/EFCore.Tests/Metadata/Internal/EntityTypeTest.cs +++ b/test/EFCore.Tests/Metadata/Internal/EntityTypeTest.cs @@ -2052,6 +2052,22 @@ public void AddIndexedProperty_throws_when_entitytype_does_not_have_indexer() () => ((IConventionEntityType)entityType).AddIndexedProperty("Nation", typeof(string))).Message); } + [ConditionalFact] + public void AddIndexedProperty_throws_when_entitytype_have_property_with_same_name() + { + var model = CreateModel(); + var entityType = model.AddEntityType(typeof(Customer)); + entityType.AddProperty("Nation", typeof(string)); + + Assert.Equal( + CoreStrings.ConflictingPropertyOrNavigation("Nation", entityType.DisplayName(), entityType.DisplayName()), + Assert.Throws(() => entityType.AddIndexedProperty("Nation", typeof(string))).Message); + + Assert.Equal( + CoreStrings.PropertyClashingNonIndexer("Name", entityType.DisplayName()), + Assert.Throws(() => entityType.AddIndexedProperty("Name", typeof(string))).Message); + } + [ConditionalFact] public void Can_get_property_indexes() { diff --git a/test/EFCore.Tests/ModelBuilding/ModelBuilderGenericTest.cs b/test/EFCore.Tests/ModelBuilding/ModelBuilderGenericTest.cs index 70a873eaaa5..3cc835e081f 100644 --- a/test/EFCore.Tests/ModelBuilding/ModelBuilderGenericTest.cs +++ b/test/EFCore.Tests/ModelBuilding/ModelBuilderGenericTest.cs @@ -202,6 +202,9 @@ public override TestPropertyBuilder Property(Expression Property(string propertyName) => new GenericTestPropertyBuilder(EntityTypeBuilder.Property(propertyName)); + public override TestPropertyBuilder IndexedProperty(string propertyName) + => new GenericTestPropertyBuilder(EntityTypeBuilder.IndexedProperty(propertyName)); + public override TestEntityTypeBuilder Ignore(Expression> propertyExpression) => Wrap(EntityTypeBuilder.Ignore(propertyExpression)); @@ -646,6 +649,9 @@ public override TestKeyBuilder HasKey(params string[] propertyNames) public override TestPropertyBuilder Property(string propertyName) => new GenericTestPropertyBuilder(OwnedNavigationBuilder.Property(propertyName)); + public override TestPropertyBuilder IndexedProperty(string propertyName) + => new GenericTestPropertyBuilder(OwnedNavigationBuilder.IndexedProperty(propertyName)); + public override TestPropertyBuilder Property( Expression> propertyExpression) => new GenericTestPropertyBuilder(OwnedNavigationBuilder.Property(propertyExpression)); diff --git a/test/EFCore.Tests/ModelBuilding/ModelBuilderNonGenericTest.cs b/test/EFCore.Tests/ModelBuilding/ModelBuilderNonGenericTest.cs index b8d128013f9..5edddea28d5 100644 --- a/test/EFCore.Tests/ModelBuilding/ModelBuilderNonGenericTest.cs +++ b/test/EFCore.Tests/ModelBuilding/ModelBuilderNonGenericTest.cs @@ -144,6 +144,9 @@ public override TestPropertyBuilder Property(Expression Property(string propertyName) => new NonGenericTestPropertyBuilder(EntityTypeBuilder.Property(propertyName)); + public override TestPropertyBuilder IndexedProperty(string propertyName) + => new NonGenericTestPropertyBuilder(EntityTypeBuilder.IndexedProperty(propertyName)); + public override TestEntityTypeBuilder Ignore(Expression> propertyExpression) => Wrap(EntityTypeBuilder.Ignore(propertyExpression.GetPropertyAccess().GetSimpleMemberName())); @@ -622,6 +625,9 @@ public override TestKeyBuilder HasKey(params string[] propertyNames) public override TestPropertyBuilder Property(string propertyName) => new NonGenericTestPropertyBuilder(OwnedNavigationBuilder.Property(propertyName)); + public override TestPropertyBuilder IndexedProperty(string propertyName) + => new NonGenericTestPropertyBuilder(OwnedNavigationBuilder.IndexedProperty(propertyName)); + public override TestPropertyBuilder Property( Expression> propertyExpression) { diff --git a/test/EFCore.Tests/ModelBuilding/ModelBuilderTestBase.cs b/test/EFCore.Tests/ModelBuilding/ModelBuilderTestBase.cs index 0d77bb079d6..a3639c6f398 100644 --- a/test/EFCore.Tests/ModelBuilding/ModelBuilderTestBase.cs +++ b/test/EFCore.Tests/ModelBuilding/ModelBuilderTestBase.cs @@ -192,6 +192,7 @@ public abstract TestPropertyBuilder Property( Expression> propertyExpression); public abstract TestPropertyBuilder Property(string propertyName); + public abstract TestPropertyBuilder IndexedProperty(string propertyName); public abstract TestEntityTypeBuilder Ignore( Expression> propertyExpression); @@ -469,6 +470,7 @@ public abstract TestOwnedNavigationBuilder HasAnnotat public abstract TestKeyBuilder HasKey(params string[] propertyNames); public abstract TestPropertyBuilder Property(string propertyName); + public abstract TestPropertyBuilder IndexedProperty(string propertyName); public abstract TestPropertyBuilder Property( Expression> propertyExpression); diff --git a/test/EFCore.Tests/ModelBuilding/NonRelationshipTestBase.cs b/test/EFCore.Tests/ModelBuilding/NonRelationshipTestBase.cs index 24549e9aa2a..ce64c89bf78 100644 --- a/test/EFCore.Tests/ModelBuilding/NonRelationshipTestBase.cs +++ b/test/EFCore.Tests/ModelBuilding/NonRelationshipTestBase.cs @@ -1308,6 +1308,98 @@ public virtual void Private_property_is_not_discovered_by_convention() Assert.Single(modelBuilder.Model.FindEntityType(typeof(Gamma)).GetProperties()); } + + [ConditionalFact] + public virtual void Can_add_seed_data_objects_indexed_property() + { + var modelBuilder = CreateModelBuilder(); + var model = modelBuilder.Model; + modelBuilder.Entity( + b => + { + b.IndexedProperty("Required"); + b.IndexedProperty("Optional"); + var d = new IndexedClass { Id = -1 }; + d["Required"] = 2; + b.HasData(d); + }); + + modelBuilder.FinalizeModel(); + + var entityType = model.FindEntityType(typeof(IndexedClass)); + var data = Assert.Single(entityType.GetSeedData()); + Assert.Equal(-1, data["Id"]); + Assert.Equal(2, data["Required"]); + Assert.Null(data["Optional"]); + } + + [ConditionalFact] + public virtual void Can_add_seed_data_anonymous_objects_indexed_property() + { + var modelBuilder = CreateModelBuilder(); + var model = modelBuilder.Model; + modelBuilder.Entity( + b => + { + b.IndexedProperty("Required"); + b.IndexedProperty("Optional"); + b.HasData(new { Id = -1, Required = 2 }); + }); + + modelBuilder.FinalizeModel(); + + var entityType = model.FindEntityType(typeof(IndexedClass)); + var data = Assert.Single(entityType.GetSeedData()); + Assert.Equal(-1, data["Id"]); + Assert.Equal(2, data["Required"]); + Assert.False(data.ContainsKey("Optional")); + } + + [ConditionalFact] + public virtual void Can_add_seed_data_objects_indexed_property_dictionary() + { + var modelBuilder = CreateModelBuilder(); + var model = modelBuilder.Model; + modelBuilder.Entity( + b => + { + b.IndexedProperty("Required"); + b.IndexedProperty("Optional"); + var d = new IndexedClassByDictionary { Id = -1 }; + d["Required"] = 2; + b.HasData(d); + }); + + modelBuilder.FinalizeModel(); + + var entityType = model.FindEntityType(typeof(IndexedClassByDictionary)); + var data = Assert.Single(entityType.GetSeedData()); + Assert.Equal(-1, data["Id"]); + Assert.Equal(2, data["Required"]); + Assert.Null(data["Optional"]); + } + + [ConditionalFact] + public virtual void Can_add_seed_data_anonymous_objects_indexed_property_dictionary() + { + var modelBuilder = CreateModelBuilder(); + var model = modelBuilder.Model; + modelBuilder.Entity( + b => + { + b.IndexedProperty("Required"); + b.IndexedProperty("Optional"); + b.HasData(new { Id = -1, Required = 2 }); + }); + + modelBuilder.FinalizeModel(); + + var entityType = model.FindEntityType(typeof(IndexedClassByDictionary)); + var data = Assert.Single(entityType.GetSeedData()); + Assert.Equal(-1, data["Id"]); + Assert.Equal(2, data["Required"]); + Assert.False(data.ContainsKey("Optional")); + } } } } diff --git a/test/EFCore.Tests/ModelBuilding/TestModel.cs b/test/EFCore.Tests/ModelBuilding/TestModel.cs index 510d90353e9..99d29a6cd28 100644 --- a/test/EFCore.Tests/ModelBuilding/TestModel.cs +++ b/test/EFCore.Tests/ModelBuilding/TestModel.cs @@ -796,5 +796,58 @@ int IReplacable.Property set => Property = value; } } + + protected class IndexedClass + { + private int _required; + private string _optional; + + public int Id { get; set; } + public object this[string name] + { + get + { + if (string.Equals(name, "Required", StringComparison.Ordinal)) + { + return _required; + } + + if (string.Equals(name, "Optional", StringComparison.Ordinal)) + { + return _optional; + } + + throw new InvalidOperationException($"Indexer property with key {name} is not defined on {nameof(IndexedClass)}."); + } + + set + { + if (string.Equals(name, "Required", StringComparison.Ordinal)) + { + _required = (int)value; + } + else if (string.Equals(name, "Optional", StringComparison.Ordinal)) + { + _optional = (string)value; + } + else + { + throw new InvalidOperationException($"Indexer property with key {name} is not defined on {nameof(IndexedClass)}."); + } + } + } + } + + protected class IndexedClassByDictionary + { + private readonly Dictionary _indexerData = new Dictionary(); + + public int Id { get; set; } + public object this[string name] + { + get => _indexerData[name]; + set => _indexerData[name] = value; + } + } } }