Skip to content

Commit b2b3c18

Browse files
committed
Extend LocustHorde
The extended `LocustHorde` has two fields which have different types but share the same base type. This is interesting when using SQL constructs to select one of the two fields as they are compatible but have different types.
1 parent 1f43fd3 commit b2b3c18

File tree

6 files changed

+97
-96
lines changed

6 files changed

+97
-96
lines changed

test/EFCore.Specification.Tests/TestModels/GearsOfWarModel/LocustHorde.cs

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ namespace Microsoft.EntityFrameworkCore.TestModels.GearsOfWarModel;
88
public class LocustHorde : Faction
99
{
1010
public LocustCommander Commander { get; set; }
11+
public LocustLeader DeputyCommander { get; set; }
1112
public List<LocustLeader> Leaders { get; set; }
1213

1314
public string CommanderName { get; set; }

test/EFCore.SqlServer.FunctionalTests/Query/GearsOfWarQuerySqlServerTest.cs

+19-19
Original file line numberDiff line numberDiff line change
@@ -2793,7 +2793,7 @@ public override async Task Member_access_on_derived_materialized_entity_using_ca
27932793

27942794
AssertSql(
27952795
"""
2796-
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[Eradicated]
2796+
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[DeputyCommanderName], [f].[Eradicated]
27972797
FROM [Factions] AS [f]
27982798
ORDER BY [f].[Name]
27992799
""");
@@ -2846,7 +2846,7 @@ public override async Task Navigation_access_on_derived_materialized_entity_usin
28462846

28472847
AssertSql(
28482848
"""
2849-
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[Eradicated], [l0].[ThreatLevel] AS [Threat]
2849+
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[DeputyCommanderName], [f].[Eradicated], [l0].[ThreatLevel] AS [Threat]
28502850
FROM [Factions] AS [f]
28512851
LEFT JOIN (
28522852
SELECT [l].[Name], [l].[ThreatLevel]
@@ -2925,7 +2925,7 @@ public override async Task Include_on_derived_entity_using_OfType(bool async)
29252925

29262926
AssertSql(
29272927
"""
2928-
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[Eradicated], [l0].[Name], [l0].[Discriminator], [l0].[LocustHordeId], [l0].[ThreatLevel], [l0].[ThreatLevelByte], [l0].[ThreatLevelNullableByte], [l0].[DefeatedByNickname], [l0].[DefeatedBySquadId], [l0].[HighCommandId], [l1].[Name], [l1].[Discriminator], [l1].[LocustHordeId], [l1].[ThreatLevel], [l1].[ThreatLevelByte], [l1].[ThreatLevelNullableByte], [l1].[DefeatedByNickname], [l1].[DefeatedBySquadId], [l1].[HighCommandId]
2928+
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[DeputyCommanderName], [f].[Eradicated], [l0].[Name], [l0].[Discriminator], [l0].[LocustHordeId], [l0].[ThreatLevel], [l0].[ThreatLevelByte], [l0].[ThreatLevelNullableByte], [l0].[DefeatedByNickname], [l0].[DefeatedBySquadId], [l0].[HighCommandId], [l1].[Name], [l1].[Discriminator], [l1].[LocustHordeId], [l1].[ThreatLevel], [l1].[ThreatLevelByte], [l1].[ThreatLevelNullableByte], [l1].[DefeatedByNickname], [l1].[DefeatedBySquadId], [l1].[HighCommandId]
29292929
FROM [Factions] AS [f]
29302930
LEFT JOIN (
29312931
SELECT [l].[Name], [l].[Discriminator], [l].[LocustHordeId], [l].[ThreatLevel], [l].[ThreatLevelByte], [l].[ThreatLevelNullableByte], [l].[DefeatedByNickname], [l].[DefeatedBySquadId], [l].[HighCommandId]
@@ -3286,7 +3286,7 @@ public override async Task ThenInclude_collection_on_derived_after_derived_refer
32863286

32873287
AssertSql(
32883288
"""
3289-
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[Eradicated], [l0].[Name], [l0].[Discriminator], [l0].[LocustHordeId], [l0].[ThreatLevel], [l0].[ThreatLevelByte], [l0].[ThreatLevelNullableByte], [l0].[DefeatedByNickname], [l0].[DefeatedBySquadId], [l0].[HighCommandId], [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOfBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[HasSoulPatch], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank]
3289+
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[DeputyCommanderName], [f].[Eradicated], [l0].[Name], [l0].[Discriminator], [l0].[LocustHordeId], [l0].[ThreatLevel], [l0].[ThreatLevelByte], [l0].[ThreatLevelNullableByte], [l0].[DefeatedByNickname], [l0].[DefeatedBySquadId], [l0].[HighCommandId], [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOfBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[HasSoulPatch], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank]
32903290
FROM [Factions] AS [f]
32913291
LEFT JOIN (
32923292
SELECT [l].[Name], [l].[Discriminator], [l].[LocustHordeId], [l].[ThreatLevel], [l].[ThreatLevelByte], [l].[ThreatLevelNullableByte], [l].[DefeatedByNickname], [l].[DefeatedBySquadId], [l].[HighCommandId]
@@ -3322,7 +3322,7 @@ public override async Task ThenInclude_reference_on_derived_after_derived_collec
33223322

33233323
AssertSql(
33243324
"""
3325-
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[Eradicated], [s].[Name], [s].[Discriminator], [s].[LocustHordeId], [s].[ThreatLevel], [s].[ThreatLevelByte], [s].[ThreatLevelNullableByte], [s].[DefeatedByNickname], [s].[DefeatedBySquadId], [s].[HighCommandId], [s].[Nickname], [s].[SquadId], [s].[AssignedCityName], [s].[CityOfBirthName], [s].[Discriminator0], [s].[FullName], [s].[HasSoulPatch], [s].[LeaderNickname], [s].[LeaderSquadId], [s].[Rank]
3325+
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[DeputyCommanderName], [f].[Eradicated], [s].[Name], [s].[Discriminator], [s].[LocustHordeId], [s].[ThreatLevel], [s].[ThreatLevelByte], [s].[ThreatLevelNullableByte], [s].[DefeatedByNickname], [s].[DefeatedBySquadId], [s].[HighCommandId], [s].[Nickname], [s].[SquadId], [s].[AssignedCityName], [s].[CityOfBirthName], [s].[Discriminator0], [s].[FullName], [s].[HasSoulPatch], [s].[LeaderNickname], [s].[LeaderSquadId], [s].[Rank]
33263326
FROM [Factions] AS [f]
33273327
LEFT JOIN (
33283328
SELECT [l].[Name], [l].[Discriminator], [l].[LocustHordeId], [l].[ThreatLevel], [l].[ThreatLevelByte], [l].[ThreatLevelNullableByte], [l].[DefeatedByNickname], [l].[DefeatedBySquadId], [l].[HighCommandId], [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[Discriminator] AS [Discriminator0], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank]
@@ -3339,7 +3339,7 @@ public override async Task Multiple_derived_included_on_one_method(bool async)
33393339

33403340
AssertSql(
33413341
"""
3342-
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[Eradicated], [l0].[Name], [l0].[Discriminator], [l0].[LocustHordeId], [l0].[ThreatLevel], [l0].[ThreatLevelByte], [l0].[ThreatLevelNullableByte], [l0].[DefeatedByNickname], [l0].[DefeatedBySquadId], [l0].[HighCommandId], [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOfBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[HasSoulPatch], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank]
3342+
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[DeputyCommanderName], [f].[Eradicated], [l0].[Name], [l0].[Discriminator], [l0].[LocustHordeId], [l0].[ThreatLevel], [l0].[ThreatLevelByte], [l0].[ThreatLevelNullableByte], [l0].[DefeatedByNickname], [l0].[DefeatedBySquadId], [l0].[HighCommandId], [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], [g0].[Nickname], [g0].[SquadId], [g0].[AssignedCityName], [g0].[CityOfBirthName], [g0].[Discriminator], [g0].[FullName], [g0].[HasSoulPatch], [g0].[LeaderNickname], [g0].[LeaderSquadId], [g0].[Rank]
33433343
FROM [Factions] AS [f]
33443344
LEFT JOIN (
33453345
SELECT [l].[Name], [l].[Discriminator], [l].[LocustHordeId], [l].[ThreatLevel], [l].[ThreatLevelByte], [l].[ThreatLevelNullableByte], [l].[DefeatedByNickname], [l].[DefeatedBySquadId], [l].[HighCommandId]
@@ -4445,10 +4445,10 @@ public override async Task Null_semantics_on_nullable_bool_from_inner_join_subqu
44454445

44464446
AssertSql(
44474447
"""
4448-
SELECT [f0].[Id], [f0].[CapitalName], [f0].[Discriminator], [f0].[Name], [f0].[ServerAddress], [f0].[CommanderName], [f0].[Eradicated]
4448+
SELECT [f0].[Id], [f0].[CapitalName], [f0].[Discriminator], [f0].[Name], [f0].[ServerAddress], [f0].[CommanderName], [f0].[DeputyCommanderName], [f0].[Eradicated]
44494449
FROM [LocustLeaders] AS [l]
44504450
INNER JOIN (
4451-
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[Eradicated]
4451+
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[DeputyCommanderName], [f].[Eradicated]
44524452
FROM [Factions] AS [f]
44534453
WHERE [f].[Name] = N'Swarm'
44544454
) AS [f0] ON [l].[Name] = [f0].[CommanderName]
@@ -4462,10 +4462,10 @@ public override async Task Null_semantics_on_nullable_bool_from_left_join_subque
44624462

44634463
AssertSql(
44644464
"""
4465-
SELECT [f0].[Id], [f0].[CapitalName], [f0].[Discriminator], [f0].[Name], [f0].[ServerAddress], [f0].[CommanderName], [f0].[Eradicated]
4465+
SELECT [f0].[Id], [f0].[CapitalName], [f0].[Discriminator], [f0].[Name], [f0].[ServerAddress], [f0].[CommanderName], [f0].[DeputyCommanderName], [f0].[Eradicated]
44664466
FROM [LocustLeaders] AS [l]
44674467
LEFT JOIN (
4468-
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[Eradicated]
4468+
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[DeputyCommanderName], [f].[Eradicated]
44694469
FROM [Factions] AS [f]
44704470
WHERE [f].[Name] = N'Swarm'
44714471
) AS [f0] ON [l].[Name] = [f0].[CommanderName]
@@ -5963,7 +5963,7 @@ public override async Task Nav_rewrite_with_convert2(bool async)
59635963

59645964
AssertSql(
59655965
"""
5966-
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[Eradicated]
5966+
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[DeputyCommanderName], [f].[Eradicated]
59675967
FROM [Factions] AS [f]
59685968
LEFT JOIN [Cities] AS [c] ON [f].[CapitalName] = [c].[Name]
59695969
LEFT JOIN (
@@ -5981,7 +5981,7 @@ public override async Task Nav_rewrite_with_convert3(bool async)
59815981

59825982
AssertSql(
59835983
"""
5984-
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[Eradicated]
5984+
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[DeputyCommanderName], [f].[Eradicated]
59855985
FROM [Factions] AS [f]
59865986
LEFT JOIN [Cities] AS [c] ON [f].[CapitalName] = [c].[Name]
59875987
LEFT JOIN (
@@ -6273,7 +6273,7 @@ public override async Task Navigation_based_on_complex_expression1(bool async)
62736273

62746274
AssertSql(
62756275
"""
6276-
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[Eradicated]
6276+
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[DeputyCommanderName], [f].[Eradicated]
62776277
FROM [Factions] AS [f]
62786278
LEFT JOIN (
62796279
SELECT [l].[Name]
@@ -6290,7 +6290,7 @@ public override async Task Navigation_based_on_complex_expression2(bool async)
62906290

62916291
AssertSql(
62926292
"""
6293-
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[Eradicated]
6293+
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[DeputyCommanderName], [f].[Eradicated]
62946294
FROM [Factions] AS [f]
62956295
LEFT JOIN (
62966296
SELECT [l].[Name]
@@ -8251,7 +8251,7 @@ public override async Task Comparison_with_value_converted_subclass(bool async)
82518251

82528252
AssertSql(
82538253
"""
8254-
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[Eradicated]
8254+
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[DeputyCommanderName], [f].[Eradicated]
82558255
FROM [Factions] AS [f]
82568256
WHERE [f].[ServerAddress] = CAST(N'127.0.0.1' AS nvarchar(45))
82578257
""");
@@ -8315,7 +8315,7 @@ public override async Task Project_navigation_defined_on_derived_from_entity_wit
83158315
SELECT [l].[Name], [l].[Discriminator], [l].[LocustHordeId], [l].[ThreatLevel], [l].[ThreatLevelByte], [l].[ThreatLevelNullableByte], [l].[DefeatedByNickname], [l].[DefeatedBySquadId], [l].[HighCommandId], [g].[Nickname], [g].[SquadId], [g].[AssignedCityName], [g].[CityOfBirthName], [g].[Discriminator], [g].[FullName], [g].[HasSoulPatch], [g].[LeaderNickname], [g].[LeaderSquadId], [g].[Rank], CASE
83168316
WHEN [g].[Nickname] IS NULL OR [g].[SquadId] IS NULL THEN CAST(1 AS bit)
83178317
ELSE CAST(0 AS bit)
8318-
END AS [IsNull], [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[Eradicated], CASE
8318+
END AS [IsNull], [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[DeputyCommanderName], [f].[Eradicated], CASE
83198319
WHEN [f].[Id] IS NULL THEN CAST(1 AS bit)
83208320
ELSE CAST(0 AS bit)
83218321
END AS [IsNull], [l0].[Id], [l0].[IsOperational], [l0].[Name], CASE
@@ -8425,7 +8425,7 @@ public override async Task Include_after_Select_throws(bool async)
84258425

84268426
AssertSql(
84278427
"""
8428-
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[Eradicated], [c].[Name], [c].[Location], [c].[Nation]
8428+
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[DeputyCommanderName], [f].[Eradicated], [c].[Name], [c].[Location], [c].[Nation]
84298429
FROM [Factions] AS [f]
84308430
LEFT JOIN [Cities] AS [c] ON [f].[CapitalName] = [c].[Name]
84318431
""");
@@ -8493,7 +8493,7 @@ public override async Task Include_on_derived_entity_with_cast(bool async)
84938493

84948494
AssertSql(
84958495
"""
8496-
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[Eradicated], [c].[Name], [c].[Location], [c].[Nation]
8496+
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[DeputyCommanderName], [f].[Eradicated], [c].[Name], [c].[Location], [c].[Nation]
84978497
FROM [Factions] AS [f]
84988498
LEFT JOIN [Cities] AS [c] ON [f].[CapitalName] = [c].[Name]
84998499
ORDER BY [f].[Id]
@@ -8559,7 +8559,7 @@ public override async Task Project_derivied_entity_with_convert_to_parent(bool a
85598559

85608560
AssertSql(
85618561
"""
8562-
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[Eradicated]
8562+
SELECT [f].[Id], [f].[CapitalName], [f].[Discriminator], [f].[Name], [f].[ServerAddress], [f].[CommanderName], [f].[DeputyCommanderName], [f].[Eradicated]
85638563
FROM [Factions] AS [f]
85648564
""");
85658565
}

0 commit comments

Comments
 (0)