Skip to content

Commit 49d50d5

Browse files
Copilotgithub-actions[bot]
authored andcommitted
Sync to EF 11.0.0-preview.2.26116.101
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent f894de9 commit 49d50d5

18 files changed

+195
-47
lines changed

Directory.Packages.props

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
<Project>
22
<PropertyGroup>
3-
<EFCoreVersion>11.0.0-preview.1.26104.118</EFCoreVersion>
4-
<MicrosoftExtensionsVersion>11.0.0-preview.1.26104.118</MicrosoftExtensionsVersion>
3+
<EFCoreVersion>11.0.0-preview.2.26116.101</EFCoreVersion>
4+
<MicrosoftExtensionsVersion>11.0.0-preview.2.26116.101</MicrosoftExtensionsVersion>
5+
<MicrosoftExtensionsConfigurationVersion>11.0.0-preview.2.26078.113</MicrosoftExtensionsConfigurationVersion>
56
<NpgsqlVersion>10.0.0</NpgsqlVersion>
67
</PropertyGroup>
78

@@ -16,8 +17,8 @@
1617
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational.Specification.Tests" Version="[$(EFCoreVersion)]" />
1718
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="[$(EFCoreVersion)]" />
1819

19-
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="$(MicrosoftExtensionsVersion)" />
20-
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="$(MicrosoftExtensionsVersion)" />
20+
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="$(MicrosoftExtensionsConfigurationVersion)" />
21+
<PackageVersion Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="$(MicrosoftExtensionsConfigurationVersion)" />
2122
<PackageVersion Include="Microsoft.Extensions.Logging" Version="$(MicrosoftExtensionsVersion)" />
2223

2324
<PackageVersion Include="Npgsql" Version="$(NpgsqlVersion)" />

src/EFCore.PG/Extensions/Internal/NpgsqlShapedQueryExpressionExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public static bool TryExtractJsonArray(
120120
&& orderingTableAlias == tvf.Alias))
121121
&& TryGetScalarProjection(source, out var projectedScalar))
122122
{
123-
jsonArray = json;
123+
jsonArray = (SqlExpression)json;
124124

125125
// The projected ColumnExpression is wrapped in a Convert to apply the element type mapping - unless it happens to be text.
126126
switch (projectedScalar)

src/EFCore.PG/Infrastructure/Internal/NpgsqlModelValidator.cs

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public override void Validate(IModel model, IDiagnosticsLogger<DbLoggerCategory.
4646
ValidateIndexIncludeProperties(model);
4747
ValidateWithoutOverlaps(model);
4848
ValidatePeriod(model);
49+
ValidateNpgsqlValueGenerationStrategies(model);
4950
}
5051

5152
/// <summary>
@@ -90,10 +91,10 @@ protected virtual void ValidateIdentityVersionCompatibility(IModel model)
9091
/// doing so can result in application failures when updating to a new Entity Framework Core release.
9192
/// </summary>
9293
protected override void ValidateValueGeneration(
93-
IEntityType entityType,
9494
IKey key,
9595
IDiagnosticsLogger<DbLoggerCategory.Model.Validation> logger)
9696
{
97+
var entityType = key.DeclaringEntityType;
9798
if (entityType.GetTableName() != null
9899
&& (string?)entityType[RelationalAnnotationNames.MappingStrategy] == RelationalAnnotationNames.TpcMappingStrategy)
99100
{
@@ -107,12 +108,9 @@ protected override void ValidateValueGeneration(
107108
}
108109

109110
/// <inheritdoc/>
110-
protected override void ValidateTypeMappings(
111-
IModel model,
112-
IDiagnosticsLogger<DbLoggerCategory.Model.Validation> logger)
111+
protected virtual void ValidateNpgsqlValueGenerationStrategies(
112+
IModel model)
113113
{
114-
base.ValidateTypeMappings(model, logger);
115-
116114
foreach (var entityType in model.GetEntityTypes())
117115
{
118116
foreach (var property in entityType.GetFlattenedDeclaredProperties())
@@ -203,27 +201,24 @@ protected virtual void ValidateIndexIncludeProperties(IModel model)
203201

204202
/// <inheritdoc />
205203
protected override void ValidateStoredProcedures(
206-
IModel model,
204+
IEntityType entityType,
207205
IDiagnosticsLogger<DbLoggerCategory.Model.Validation> logger)
208206
{
209-
base.ValidateStoredProcedures(model, logger);
207+
base.ValidateStoredProcedures(entityType, logger);
210208

211-
foreach (var entityType in model.GetEntityTypes())
209+
if (entityType.GetDeleteStoredProcedure() is { } deleteStoredProcedure)
212210
{
213-
if (entityType.GetDeleteStoredProcedure() is { } deleteStoredProcedure)
214-
{
215-
ValidateSproc(deleteStoredProcedure, logger);
216-
}
211+
ValidateSproc(deleteStoredProcedure, logger);
212+
}
217213

218-
if (entityType.GetInsertStoredProcedure() is { } insertStoredProcedure)
219-
{
220-
ValidateSproc(insertStoredProcedure, logger);
221-
}
214+
if (entityType.GetInsertStoredProcedure() is { } insertStoredProcedure)
215+
{
216+
ValidateSproc(insertStoredProcedure, logger);
217+
}
222218

223-
if (entityType.GetUpdateStoredProcedure() is { } updateStoredProcedure)
224-
{
225-
ValidateSproc(updateStoredProcedure, logger);
226-
}
219+
if (entityType.GetUpdateStoredProcedure() is { } updateStoredProcedure)
220+
{
221+
ValidateSproc(updateStoredProcedure, logger);
227222
}
228223

229224
static void ValidateSproc(IStoredProcedure sproc, IDiagnosticsLogger<DbLoggerCategory.Model.Validation> logger)

src/EFCore.PG/Query/Expressions/Internal/PgTableValuedFunctionExpression.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public class PgTableValuedFunctionExpression : TableValuedFunctionExpression, IE
5454
public PgTableValuedFunctionExpression(
5555
string alias,
5656
string name,
57-
IReadOnlyList<SqlExpression> arguments,
57+
IReadOnlyList<Expression> arguments,
5858
IReadOnlyList<ColumnInfo>? columnInfos = null,
5959
bool withOrdinality = true)
6060
: base(alias, name, schema: null, builtIn: true, arguments)
@@ -75,18 +75,18 @@ protected override Expression VisitChildren(ExpressionVisitor visitor)
7575
/// any release. You should only use it directly in your code with extreme caution and knowing that
7676
/// doing so can result in application failures when updating to a new Entity Framework Core release.
7777
/// </summary>
78-
public override PgTableValuedFunctionExpression Update(IReadOnlyList<SqlExpression> arguments)
78+
public override PgTableValuedFunctionExpression Update(IReadOnlyList<Expression> arguments)
7979
=> arguments.SequenceEqual(Arguments, ReferenceEqualityComparer.Instance)
8080
? this
8181
: new PgTableValuedFunctionExpression(Alias, Name, arguments, ColumnInfos, WithOrdinality);
8282

8383
/// <inheritdoc />
8484
public override TableExpressionBase Clone(string? alias, ExpressionVisitor cloningExpressionVisitor)
8585
{
86-
var arguments = new SqlExpression[Arguments.Count];
86+
var arguments = new Expression[Arguments.Count];
8787
for (var i = 0; i < arguments.Length; i++)
8888
{
89-
arguments[i] = (SqlExpression)cloningExpressionVisitor.Visit(Arguments[i]);
89+
arguments[i] = cloningExpressionVisitor.Visit(Arguments[i]);
9090
}
9191

9292
return new PgTableValuedFunctionExpression(Alias, Name, arguments, ColumnInfos, WithOrdinality);

src/EFCore.PG/Query/Expressions/Internal/PgUnnestExpression.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class PgUnnestExpression : PgTableValuedFunctionExpression
3333
/// doing so can result in application failures when updating to a new Entity Framework Core release.
3434
/// </remarks>
3535
public virtual SqlExpression Array
36-
=> Arguments[0];
36+
=> (SqlExpression)Arguments[0];
3737

3838
/// <summary>
3939
/// The name of the column to be projected out from the <c>unnest</c> call.
@@ -75,8 +75,8 @@ protected override Expression VisitChildren(ExpressionVisitor visitor)
7575
/// any release. You should only use it directly in your code with extreme caution and knowing that
7676
/// doing so can result in application failures when updating to a new Entity Framework Core release.
7777
/// </summary>
78-
public override PgUnnestExpression Update(IReadOnlyList<SqlExpression> arguments)
79-
=> arguments is [var singleArgument]
78+
public override PgUnnestExpression Update(IReadOnlyList<Expression> arguments)
79+
=> arguments is [SqlExpression singleArgument]
8080
? Update(singleArgument)
8181
: throw new ArgumentException();
8282

src/EFCore.PG/Storage/Internal/Mapping/NpgsqlStructuralJsonTypeMapping.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace Npgsql.EntityFrameworkCore.PostgreSQL.Storage.Internal.Mapping;
99
/// See <see cref="NpgsqlJsonTypeMapping" /> for the older Npgsql-specific support, which allows mapping json/jsonb to text, to e.g.
1010
/// <see cref="JsonElement" /> (weakly-typed mapping) or to arbitrary POCOs (but without them being modeled).
1111
/// </summary>
12-
public class NpgsqlStructuralJsonTypeMapping : JsonTypeMapping
12+
public class NpgsqlStructuralJsonTypeMapping : StructuralJsonTypeMapping
1313
{
1414
/// <summary>
1515
/// The database type used by Npgsql (<see cref="NpgsqlDbType.Json" /> or <see cref="NpgsqlDbType.Jsonb" />.

test/EFCore.PG.FunctionalTests/Query/Associations/ComplexJson/ComplexJsonProjectionNpgsqlTest.cs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ public override async Task Select_unmapped_associate_scalar_property(QueryTracki
151151

152152
AssertSql(
153153
"""
154-
SELECT r."Id", r."Name", r."AssociateCollection", r."OptionalAssociate", r."RequiredAssociate"
154+
SELECT r."RequiredAssociate"
155155
FROM "RootEntity" AS r
156156
""");
157157
}
@@ -279,6 +279,20 @@ public override async Task Select_root_duplicated(QueryTrackingBehavior queryTra
279279
""");
280280
}
281281

282+
public override async Task Select_associate_and_target_to_index_based_binding_via_closure(QueryTrackingBehavior queryTrackingBehavior)
283+
{
284+
await base.Select_associate_and_target_to_index_based_binding_via_closure(queryTrackingBehavior);
285+
286+
if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll)
287+
{
288+
AssertSql(
289+
"""
290+
SELECT r."Id", r."RequiredAssociate"
291+
FROM "RootEntity" AS r
292+
""");
293+
}
294+
}
295+
282296
#endregion Multiple
283297

284298
#region Subquery

test/EFCore.PG.FunctionalTests/Query/Associations/ComplexTableSplitting/ComplexTableSplittingProjectionNpgsqlTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ public override async Task Select_unmapped_associate_scalar_property(QueryTracki
153153

154154
AssertSql(
155155
"""
156-
SELECT r."Id", r."Name", r."OptionalAssociate_Id", r."OptionalAssociate_Int", r."OptionalAssociate_Ints", r."OptionalAssociate_Name", r."OptionalAssociate_String", r."OptionalAssociate_OptionalNestedAssociate_Id", r."OptionalAssociate_OptionalNestedAssociate_Int", r."OptionalAssociate_OptionalNestedAssociate_Ints", r."OptionalAssociate_OptionalNestedAssociate_Name", r."OptionalAssociate_OptionalNestedAssociate_String", r."OptionalAssociate_RequiredNestedAssociate_Id", r."OptionalAssociate_RequiredNestedAssociate_Int", r."OptionalAssociate_RequiredNestedAssociate_Ints", r."OptionalAssociate_RequiredNestedAssociate_Name", r."OptionalAssociate_RequiredNestedAssociate_String", r."RequiredAssociate_Id", r."RequiredAssociate_Int", r."RequiredAssociate_Ints", r."RequiredAssociate_Name", r."RequiredAssociate_String", r."RequiredAssociate_OptionalNestedAssociate_Id", r."RequiredAssociate_OptionalNestedAssociate_Int", r."RequiredAssociate_OptionalNestedAssociate_Ints", r."RequiredAssociate_OptionalNestedAssociate_Name", r."RequiredAssociate_OptionalNestedAssociate_String", r."RequiredAssociate_RequiredNestedAssociate_Id", r."RequiredAssociate_RequiredNestedAssociate_Int", r."RequiredAssociate_RequiredNestedAssociate_Ints", r."RequiredAssociate_RequiredNestedAssociate_Name", r."RequiredAssociate_RequiredNestedAssociate_String"
156+
SELECT r."RequiredAssociate_Id", r."RequiredAssociate_Int", r."RequiredAssociate_Ints", r."RequiredAssociate_Name", r."RequiredAssociate_String", r."RequiredAssociate_OptionalNestedAssociate_Id", r."RequiredAssociate_OptionalNestedAssociate_Int", r."RequiredAssociate_OptionalNestedAssociate_Ints", r."RequiredAssociate_OptionalNestedAssociate_Name", r."RequiredAssociate_OptionalNestedAssociate_String", r."RequiredAssociate_RequiredNestedAssociate_Id", r."RequiredAssociate_RequiredNestedAssociate_Int", r."RequiredAssociate_RequiredNestedAssociate_Ints", r."RequiredAssociate_RequiredNestedAssociate_Name", r."RequiredAssociate_RequiredNestedAssociate_String"
157157
FROM "RootEntity" AS r
158158
""");
159159
}
@@ -191,7 +191,7 @@ public override async Task Select_nested_collection_on_required_associate(QueryT
191191

192192
AssertSql(
193193
"""
194-
SELECT r."Id", r."Name", r."OptionalAssociate_Id", r."OptionalAssociate_Int", r."OptionalAssociate_Ints", r."OptionalAssociate_Name", r."OptionalAssociate_String", r."OptionalAssociate_OptionalNestedAssociate_Id", r."OptionalAssociate_OptionalNestedAssociate_Int", r."OptionalAssociate_OptionalNestedAssociate_Ints", r."OptionalAssociate_OptionalNestedAssociate_Name", r."OptionalAssociate_OptionalNestedAssociate_String", r."OptionalAssociate_RequiredNestedAssociate_Id", r."OptionalAssociate_RequiredNestedAssociate_Int", r."OptionalAssociate_RequiredNestedAssociate_Ints", r."OptionalAssociate_RequiredNestedAssociate_Name", r."OptionalAssociate_RequiredNestedAssociate_String", r."RequiredAssociate_Id", r."RequiredAssociate_Int", r."RequiredAssociate_Ints", r."RequiredAssociate_Name", r."RequiredAssociate_String", r."RequiredAssociate_OptionalNestedAssociate_Id", r."RequiredAssociate_OptionalNestedAssociate_Int", r."RequiredAssociate_OptionalNestedAssociate_Ints", r."RequiredAssociate_OptionalNestedAssociate_Name", r."RequiredAssociate_OptionalNestedAssociate_String", r."RequiredAssociate_RequiredNestedAssociate_Id", r."RequiredAssociate_RequiredNestedAssociate_Int", r."RequiredAssociate_RequiredNestedAssociate_Ints", r."RequiredAssociate_RequiredNestedAssociate_Name", r."RequiredAssociate_RequiredNestedAssociate_String"
194+
SELECT r."RequiredAssociate_Id", r."RequiredAssociate_Int", r."RequiredAssociate_Ints", r."RequiredAssociate_Name", r."RequiredAssociate_String", r."RequiredAssociate_OptionalNestedAssociate_Id", r."RequiredAssociate_OptionalNestedAssociate_Int", r."RequiredAssociate_OptionalNestedAssociate_Ints", r."RequiredAssociate_OptionalNestedAssociate_Name", r."RequiredAssociate_OptionalNestedAssociate_String", r."RequiredAssociate_RequiredNestedAssociate_Id", r."RequiredAssociate_RequiredNestedAssociate_Int", r."RequiredAssociate_RequiredNestedAssociate_Ints", r."RequiredAssociate_RequiredNestedAssociate_Name", r."RequiredAssociate_RequiredNestedAssociate_String"
195195
FROM "RootEntity" AS r
196196
ORDER BY r."Id" NULLS FIRST
197197
""");
@@ -203,7 +203,7 @@ public override async Task Select_nested_collection_on_optional_associate(QueryT
203203

204204
AssertSql(
205205
"""
206-
SELECT r."Id", r."Name", r."OptionalAssociate_Id", r."OptionalAssociate_Int", r."OptionalAssociate_Ints", r."OptionalAssociate_Name", r."OptionalAssociate_String", r."OptionalAssociate_OptionalNestedAssociate_Id", r."OptionalAssociate_OptionalNestedAssociate_Int", r."OptionalAssociate_OptionalNestedAssociate_Ints", r."OptionalAssociate_OptionalNestedAssociate_Name", r."OptionalAssociate_OptionalNestedAssociate_String", r."OptionalAssociate_RequiredNestedAssociate_Id", r."OptionalAssociate_RequiredNestedAssociate_Int", r."OptionalAssociate_RequiredNestedAssociate_Ints", r."OptionalAssociate_RequiredNestedAssociate_Name", r."OptionalAssociate_RequiredNestedAssociate_String", r."RequiredAssociate_Id", r."RequiredAssociate_Int", r."RequiredAssociate_Ints", r."RequiredAssociate_Name", r."RequiredAssociate_String", r."RequiredAssociate_OptionalNestedAssociate_Id", r."RequiredAssociate_OptionalNestedAssociate_Int", r."RequiredAssociate_OptionalNestedAssociate_Ints", r."RequiredAssociate_OptionalNestedAssociate_Name", r."RequiredAssociate_OptionalNestedAssociate_String", r."RequiredAssociate_RequiredNestedAssociate_Id", r."RequiredAssociate_RequiredNestedAssociate_Int", r."RequiredAssociate_RequiredNestedAssociate_Ints", r."RequiredAssociate_RequiredNestedAssociate_Name", r."RequiredAssociate_RequiredNestedAssociate_String"
206+
SELECT r."OptionalAssociate_Id", r."OptionalAssociate_Int", r."OptionalAssociate_Ints", r."OptionalAssociate_Name", r."OptionalAssociate_String", r."OptionalAssociate_OptionalNestedAssociate_Id", r."OptionalAssociate_OptionalNestedAssociate_Int", r."OptionalAssociate_OptionalNestedAssociate_Ints", r."OptionalAssociate_OptionalNestedAssociate_Name", r."OptionalAssociate_OptionalNestedAssociate_String", r."OptionalAssociate_RequiredNestedAssociate_Id", r."OptionalAssociate_RequiredNestedAssociate_Int", r."OptionalAssociate_RequiredNestedAssociate_Ints", r."OptionalAssociate_RequiredNestedAssociate_Name", r."OptionalAssociate_RequiredNestedAssociate_String"
207207
FROM "RootEntity" AS r
208208
ORDER BY r."Id" NULLS FIRST
209209
""");

test/EFCore.PG.FunctionalTests/Query/Associations/Navigations/NavigationsProjectionNpgsqlTest.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,22 @@ LEFT JOIN (
349349
""");
350350
}
351351

352+
public override async Task Select_associate_and_target_to_index_based_binding_via_closure(QueryTrackingBehavior queryTrackingBehavior)
353+
{
354+
await base.Select_associate_and_target_to_index_based_binding_via_closure(queryTrackingBehavior);
355+
356+
AssertSql(
357+
"""
358+
SELECT r."Id", a."Id", a."CollectionRootId", a."Int", a."Ints", a."Name", a."OptionalNestedAssociateId", a."RequiredNestedAssociateId", a."String", n."Id", n0."Id", n1."Id", n1."CollectionAssociateId", n1."Int", n1."Ints", n1."Name", n1."String", n."CollectionAssociateId", n."Int", n."Ints", n."Name", n."String", n0."CollectionAssociateId", n0."Int", n0."Ints", n0."Name", n0."String"
359+
FROM "RootEntity" AS r
360+
INNER JOIN "AssociateType" AS a ON r."RequiredAssociateId" = a."Id"
361+
LEFT JOIN "NestedAssociateType" AS n ON a."OptionalNestedAssociateId" = n."Id"
362+
INNER JOIN "NestedAssociateType" AS n0 ON a."RequiredNestedAssociateId" = n0."Id"
363+
LEFT JOIN "NestedAssociateType" AS n1 ON a."Id" = n1."CollectionAssociateId"
364+
ORDER BY r."Id" NULLS FIRST, a."Id" NULLS FIRST, n."Id" NULLS FIRST, n0."Id" NULLS FIRST
365+
""");
366+
}
367+
352368
#endregion Multiple
353369

354370
#region Subquery

test/EFCore.PG.FunctionalTests/Query/Associations/OwnedJson/OwnedJsonProjectionNpgsqlTest.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,20 @@ public override async Task Select_root_duplicated(QueryTrackingBehavior queryTra
321321
""");
322322
}
323323

324+
public override async Task Select_associate_and_target_to_index_based_binding_via_closure(QueryTrackingBehavior queryTrackingBehavior)
325+
{
326+
await base.Select_associate_and_target_to_index_based_binding_via_closure(queryTrackingBehavior);
327+
328+
if (queryTrackingBehavior is not QueryTrackingBehavior.TrackAll)
329+
{
330+
AssertSql(
331+
"""
332+
SELECT r."Id", r."RequiredAssociate"
333+
FROM "RootEntity" AS r
334+
""");
335+
}
336+
}
337+
324338
#endregion Multiple
325339

326340
#region Subquery

0 commit comments

Comments
 (0)