From 0a1ca5d83061749168c0ef94b8d0a33185de5f19 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 22 Jun 2026 20:55:32 +0000 Subject: [PATCH 1/4] Document PR #38440 provider-facing breaking change --- .../core/what-is-new/ef-core-11.0/provider-facing-changes.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/entity-framework/core/what-is-new/ef-core-11.0/provider-facing-changes.md b/entity-framework/core/what-is-new/ef-core-11.0/provider-facing-changes.md index de4576876e..0c73ea81ff 100644 --- a/entity-framework/core/what-is-new/ef-core-11.0/provider-facing-changes.md +++ b/entity-framework/core/what-is-new/ef-core-11.0/provider-facing-changes.md @@ -2,7 +2,7 @@ title: Provider-facing changes in EF Core 11 (EF11) - EF Core description: List of provider-facing changes introduced in Entity Framework Core 11 (EF11) author: roji -ms.date: 04/08/2026 +ms.date: 06/22/2026 uid: core/what-is-new/ef-core-11.0/provider-facing-changes --- @@ -13,6 +13,7 @@ This page documents noteworthy changes in EF Core 11 which may affect EF provide ## Changes * Collation names are now quoted in SQL, like column and table names ([see #37462](https://github.com/dotnet/efcore/issues/37462)). If your database doesn't support collation name quoting, override `QuerySqlGenerator.VisitSql()` and `MigrationsSqlGenerator.ColumnDefinition()` to revert to the previous behavior, but it's recommended to implement some sort of restricted character validation. +* Type mapping has been made generic to support NativeAOT ([PR #38440](https://github.com/dotnet/efcore/pull/38440)). Provider maintainers should: (1) update custom mappings to derive from the new generic mapping base types (`CoreTypeMapping` and `RelationalTypeMapping` where applicable) so default comparers can be created without reflection, (2) update calls/overrides of `CoreTypeMapping.Clone(...)` and `RelationalTypeMapping.Clone(...)` to remove the old `clrType` argument and account for the updated `keyComparer` behavior (`keyComparer` now defaults to `comparer` when provided), and (3) update custom runtime annotation code generators implementing `ICSharpRuntimeAnnotationCodeGenerator.Create(...)` for the new signature. * The `JsonPath` property on `IColumnModification` and `ColumnModificationParameters` has changed from `string?` to the new structured `JsonPath` type ([PR #38038](https://github.com/dotnet/efcore/pull/38038)). The `JsonPath` class provides `Segments`, `Ordinals`, an `IsRoot` property, and an `AppendTo(StringBuilder)` method for rendering the JSONPATH string. Providers that override `UpdateSqlGenerator.AppendUpdateColumnValue()` or otherwise handle JSON partial updates should update their code to use this new type. Where previously you checked for `null` or `"$"`, use `JsonPath is not { IsRoot: false }` instead, and call `JsonPath.AppendTo(stringBuilder)` to write the JSONPATH string representation. * EF Core now strips no-op SQL CASTs - i.e. `SqlUnaryExpression(Convert)` nodes whose store type matches that of their operand ([see #36247](https://github.com/dotnet/efcore/issues/36247), [PR #38156](https://github.com/dotnet/efcore/pull/38156)). This can flush out imprecise translations which assigned an imprecise store type to a node and then wrapped it with a Convert; because the store types now match, the Convert is stripped, and the imprecise store type may propagate. Review your translations to ensure that the operand of a Convert node has the correct, precise store type. From 3c7014a9207c053ba0b9bbf2422b08bfdcac7819 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 22 Jun 2026 22:08:13 +0000 Subject: [PATCH 2/4] docs: trim PR 38440 guidance per review --- .../core/what-is-new/ef-core-11.0/provider-facing-changes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/entity-framework/core/what-is-new/ef-core-11.0/provider-facing-changes.md b/entity-framework/core/what-is-new/ef-core-11.0/provider-facing-changes.md index 0c73ea81ff..717226581e 100644 --- a/entity-framework/core/what-is-new/ef-core-11.0/provider-facing-changes.md +++ b/entity-framework/core/what-is-new/ef-core-11.0/provider-facing-changes.md @@ -13,7 +13,7 @@ This page documents noteworthy changes in EF Core 11 which may affect EF provide ## Changes * Collation names are now quoted in SQL, like column and table names ([see #37462](https://github.com/dotnet/efcore/issues/37462)). If your database doesn't support collation name quoting, override `QuerySqlGenerator.VisitSql()` and `MigrationsSqlGenerator.ColumnDefinition()` to revert to the previous behavior, but it's recommended to implement some sort of restricted character validation. -* Type mapping has been made generic to support NativeAOT ([PR #38440](https://github.com/dotnet/efcore/pull/38440)). Provider maintainers should: (1) update custom mappings to derive from the new generic mapping base types (`CoreTypeMapping` and `RelationalTypeMapping` where applicable) so default comparers can be created without reflection, (2) update calls/overrides of `CoreTypeMapping.Clone(...)` and `RelationalTypeMapping.Clone(...)` to remove the old `clrType` argument and account for the updated `keyComparer` behavior (`keyComparer` now defaults to `comparer` when provided), and (3) update custom runtime annotation code generators implementing `ICSharpRuntimeAnnotationCodeGenerator.Create(...)` for the new signature. +* Type mapping has been made generic to support NativeAOT ([PR #38440](https://github.com/dotnet/efcore/pull/38440)). Provider maintainers should: (1) update custom mappings to derive from the new generic mapping base types (`CoreTypeMapping` and `RelationalTypeMapping` where applicable) so default comparers can be created without reflection, and (2) update calls/overrides of `CoreTypeMapping.Clone(...)` and `RelationalTypeMapping.Clone(...)` to remove the old `clrType` argument. * The `JsonPath` property on `IColumnModification` and `ColumnModificationParameters` has changed from `string?` to the new structured `JsonPath` type ([PR #38038](https://github.com/dotnet/efcore/pull/38038)). The `JsonPath` class provides `Segments`, `Ordinals`, an `IsRoot` property, and an `AppendTo(StringBuilder)` method for rendering the JSONPATH string. Providers that override `UpdateSqlGenerator.AppendUpdateColumnValue()` or otherwise handle JSON partial updates should update their code to use this new type. Where previously you checked for `null` or `"$"`, use `JsonPath is not { IsRoot: false }` instead, and call `JsonPath.AppendTo(stringBuilder)` to write the JSONPATH string representation. * EF Core now strips no-op SQL CASTs - i.e. `SqlUnaryExpression(Convert)` nodes whose store type matches that of their operand ([see #36247](https://github.com/dotnet/efcore/issues/36247), [PR #38156](https://github.com/dotnet/efcore/pull/38156)). This can flush out imprecise translations which assigned an imprecise store type to a node and then wrapped it with a Convert; because the store types now match, the Convert is stripped, and the imprecise store type may propagate. Review your translations to ensure that the operand of a Convert node has the correct, precise store type. From 9856eeac02a46944ca6e7c3056cec3ca982e4f8d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 23 Jun 2026 02:37:57 +0000 Subject: [PATCH 3/4] Add xUnit v3 upgrade as a test change in provider-facing changes --- .../core/what-is-new/ef-core-11.0/provider-facing-changes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/entity-framework/core/what-is-new/ef-core-11.0/provider-facing-changes.md b/entity-framework/core/what-is-new/ef-core-11.0/provider-facing-changes.md index 717226581e..79f077d456 100644 --- a/entity-framework/core/what-is-new/ef-core-11.0/provider-facing-changes.md +++ b/entity-framework/core/what-is-new/ef-core-11.0/provider-facing-changes.md @@ -21,3 +21,4 @@ This page documents noteworthy changes in EF Core 11 which may affect EF provide * The inheritance specification tests have been reorganized into a folder of their own ([PR](https://github.com/dotnet/efcore/pull/37410)). * Query test classes now support non-shared-model tests via a new `QueryFixtureBase` class that all query fixtures extend ([PR #37681](https://github.com/dotnet/efcore/pull/37681)). The previous pattern of extending `SharedStoreFixtureBase` and `IQueryFixtureBase` separately has been replaced. `NonSharedPrimitiveCollectionsQueryTestBase` has been merged into `PrimitiveCollectionsQueryTestBase`, and per-type array tests have been moved to `TypeTestBase.Primitive_collection_in_query`. +* EF Core's Specification.Tests assemblies have been upgraded from xUnit v2 to xUnit v3 ([PR #38277](https://github.com/dotnet/efcore/pull/38277)). Provider test projects that reference these assemblies and inherit from the base test classes must be migrated to xUnit v3: update to the new `xunit.v3` packages, `Microsoft.DotNet.XUnitV3Extensions`, `Microsoft.Testing.Platform` runner, and `Microsoft.NET.Test.Sdk`; account for `[Collection]`/`ITestOutputHelper` API differences; and change `[ConditionalFact]` to `[Fact]` and `[ConditionalTheory]` to `[Theory]`. When running tests directly with `dotnet exec`, add `--filter-not-trait category=failing --ignore-exit-code 8`. From 99909adbf5ffdb44f16d40af919d526680cca963 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 23 Jun 2026 20:43:48 +0000 Subject: [PATCH 4/4] Add PR #38192 (complex-type keys/indexes) as a provider-facing change --- .../core/what-is-new/ef-core-11.0/provider-facing-changes.md | 1 + 1 file changed, 1 insertion(+) diff --git a/entity-framework/core/what-is-new/ef-core-11.0/provider-facing-changes.md b/entity-framework/core/what-is-new/ef-core-11.0/provider-facing-changes.md index 79f077d456..d98aa99621 100644 --- a/entity-framework/core/what-is-new/ef-core-11.0/provider-facing-changes.md +++ b/entity-framework/core/what-is-new/ef-core-11.0/provider-facing-changes.md @@ -16,6 +16,7 @@ This page documents noteworthy changes in EF Core 11 which may affect EF provide * Type mapping has been made generic to support NativeAOT ([PR #38440](https://github.com/dotnet/efcore/pull/38440)). Provider maintainers should: (1) update custom mappings to derive from the new generic mapping base types (`CoreTypeMapping` and `RelationalTypeMapping` where applicable) so default comparers can be created without reflection, and (2) update calls/overrides of `CoreTypeMapping.Clone(...)` and `RelationalTypeMapping.Clone(...)` to remove the old `clrType` argument. * The `JsonPath` property on `IColumnModification` and `ColumnModificationParameters` has changed from `string?` to the new structured `JsonPath` type ([PR #38038](https://github.com/dotnet/efcore/pull/38038)). The `JsonPath` class provides `Segments`, `Ordinals`, an `IsRoot` property, and an `AppendTo(StringBuilder)` method for rendering the JSONPATH string. Providers that override `UpdateSqlGenerator.AppendUpdateColumnValue()` or otherwise handle JSON partial updates should update their code to use this new type. Where previously you checked for `null` or `"$"`, use `JsonPath is not { IsRoot: false }` instead, and call `JsonPath.AppendTo(stringBuilder)` to write the JSONPATH string representation. * EF Core now strips no-op SQL CASTs - i.e. `SqlUnaryExpression(Convert)` nodes whose store type matches that of their operand ([see #36247](https://github.com/dotnet/efcore/issues/36247), [PR #38156](https://github.com/dotnet/efcore/pull/38156)). This can flush out imprecise translations which assigned an imprecise store type to a node and then wrapped it with a Convert; because the store types now match, the Convert is stripped, and the imprecise store type may propagate. Review your translations to ensure that the operand of a Convert node has the correct, precise store type. +* Keys and indexes can now traverse complex-type properties ([PR #38192](https://github.com/dotnet/efcore/pull/38192)). The metadata API for indexes and keys has been broadened (e.g., `FindIndex`/`AddIndex` signatures now accept `IReadOnlyProperty`, new `ModelValidator` checks, and `ICSharpHelper` additions). Providers that consume index/key metadata, generate C# for indexes (scaffolding/codegen), or implement custom validation should review and update their code to handle complex-type-spanning keys and indexes. ## Test changes