From 0aea95502e006ae9e2ab622f9cc1e5074d19f6a2 Mon Sep 17 00:00:00 2001 From: Shay Rojansky Date: Thu, 8 Jan 2026 08:40:31 +0100 Subject: [PATCH] Provider-impacting change note for collation quoting Also remove old/obsolete provider change page. --- .../core/providers/provider-log.md | 104 ------------------ .../core/providers/writing-a-provider.md | 6 - .../ef-core-11.0/provider-facing-changes.md | 4 + .../ef-core-3.x/breaking-changes.md | 1 - entity-framework/toc.yml | 2 - 5 files changed, 4 insertions(+), 113 deletions(-) delete mode 100644 entity-framework/core/providers/provider-log.md diff --git a/entity-framework/core/providers/provider-log.md b/entity-framework/core/providers/provider-log.md deleted file mode 100644 index c81cda4ada..0000000000 --- a/entity-framework/core/providers/provider-log.md +++ /dev/null @@ -1,104 +0,0 @@ ---- -title: Log of provider-impacting changes - EF Core -description: A log of changes in Entity Framework Core which impact providers -author: SamMonoRT -ms.date: 08/08/2018 -uid: core/providers/provider-log ---- - -# Provider-impacting changes - -> [!IMPORTANT] -> This page is no longer being updated. Changes that provider authors need to be aware of are marked with [`providers-beware`](https://github.com/dotnet/efcore/labels/providers-beware). - -This page contains links to pull requests made on the EF Core repo that may require authors of other database providers to react. The intention is to provide a starting point for authors of existing third-party database providers when updating their provider to a new version. - -We are starting this log with changes from 2.1 to 2.2. Prior to 2.1 we used the [`providers-beware`](https://github.com/dotnet/efcore/labels/providers-beware) and [`providers-fyi`](https://github.com/dotnet/efcore/labels/providers-fyi) labels on our issues and pull requests. - -## 2.2 ---> 3.x - -Note that many of the [application-level breaking changes](xref:core/what-is-new/ef-core-3.x/breaking-changes) will also impact providers. - -* - * Removed obsolete APIs and collapsed optional parameter overloads - * Removed DatabaseColumn.GetUnderlyingStoreType() -* - * Removed obsolete APIs -* - * Subclasses of CharTypeMapping may have been broken due to behavior changes required to fixing a couple bugs in the base implementation. -* - * Added a base class for IDatabaseModelFactory and updated it to use a paramater object to mitigate future breaks. -* - * Used parameter objects in MigrationsSqlGenerator to mitigate future breaks. -* - * Explicit configuration of log levels required some changes to APIs that providers may be using. Specifically, if providers are using the logging infrastructure directly, then this change may break that use. Also, Providers that use the infrastructure (which will be public) going forward will need to derive from `LoggingDefinitions` or `RelationalLoggingDefinitions`. See the SQL Server and in-memory providers for examples. -* - * Core, Relational, and Abstractions resource strings are now public. - * `CoreLoggerExtensions` and `RelationalLoggerExtensions` are now public. Providers should use these APIs when logging events that are defined at the core or relational level. Do not access logging resources directly; these are still internal. - * `IRawSqlCommandBuilder` has changed from a singleton service to a scoped service - * `IMigrationsSqlGenerator` has changed from a singleton service to a scoped service -* - * The infrastructure for building relational commands has been made public so it can be safely used by providers and refactored slightly. -* - * `ILazyLoader` has changed from a scoped service to a transient service -* - * `IUpdateSqlGenerator` has changed from a scoped service to a singleton service - * Also, `ISingletonUpdateSqlGenerator` has been removed -* - * A lot of internal code that was being used by providers has now been made public - * It should no longer be necssary to reference `IndentedStringBuilder` since it has been factored out of the places that exposed it - * Usages of `NonCapturingLazyInitializer` should be replaced with `LazyInitializer` from the BCL -* - * This change is fully covered in the application breaking changes document. For providers, this may be more impacting because testing EF core can often result in hitting this issue, so test infrastructure has changed to make that less likely. -* - * `EntityMaterializerSource` has been simplified -* - * StartsWith translation has changed in a way that providers may want/need to react -* - * Convention set services have changed. Providers should now inherit from either "ProviderConventionSet" or "RelationalConventionSet". - * Customizations can be added through `IConventionSetCustomizer` services, but this is intended to be used by other extensions, not providers. - * Conventions used at runtime should be resolved from `IConventionSetBuilder`. -* - * Data seeding has been refactored into a public API to avoid the need to use internal types. This should only impact non-relational providers, since seeding is handled by the base relational class for all relational providers. - -## 2.1 ---> 2.2 - -### Test-only changes - -* - Allow customizable SQL delimeters in tests - * Test changes that allow non-strict floating point comparisons in BuiltInDataTypesTestBase - * Test changes that allow query tests to be re-used with different SQL delimeters -* - Add DbFunction tests to the relational specification tests - * Such that these tests can be run against all database providers -* - Async test cleanup - * Remove `Wait` calls, unneeded async, and renamed some test methods -* - Unify logging test infrastructure - * Added `CreateListLoggerFactory` and removed some previous logging infrastructure, which will require providers using these tests to react -* - Run more query tests both synchronously and asynchronously - * Test names and factoring has changed, which will require providers using these tests to react -* - Renaming navigations in the ComplexNavigations model - * Providers using these tests may need to react -* - Return the context to the pool instead of disposing in functional tests - * This change includes some test refactoring which may require providers to react - -### Test and product code changes - -* - Consolidate RelationalTypeMapping.Clone methods - * Changes in 2.1 to the RelationalTypeMapping allowed for a simplification in derived classes. We don't believe this was breaking to providers, but providers can take advantage of this change in their derived type mapping classes. -* - Tagged or named queries - * Adds infrastructure for tagging LINQ queries and having those tags show up as comments in the SQL. This may require providers to react in SQL generation. -* - Support spatial data via NTS - * Allows type mappings and member translators to be registered outside of the provider - * Providers must call base.FindMapping() in their ITypeMappingSource implementation for it to work - * Follow this pattern to add spatial support to your provider that is consistent across providers. -* - Add enhanced debugging for service provider creation - * Allows DbContextOptionsExtensions to implement a new interface that can help people understand why the internal service provider is being re-built -* - Adds CanConnect API for use by health checks - * This PR adds the concept of `CanConnect` which will be used by ASP.NET Core health checks to determine if the database is available. By default, the relational implementation just calls `Exist`, but providers can implement something different if necessary. Non-relational providers will need to implement the new API in order for the health check to be usable. -* - Update base RelationalTypeMapping to not set DbParameter Size - * Stop setting Size by default since it can cause truncation. Providers may need to add their own logic if Size needs to be set. -* - RevEng: Always specify column type for decimal columns - * Always configure column type for decimal columns in scaffolded code rather than configuring by convention. - * Providers should not require any changes on their end. -* - Adds CaseExpression for generating SQL CASE expressions -* - Adds the ability to specify type mappings on SqlFunctionExpression to improve store type inference of arguments and results. diff --git a/entity-framework/core/providers/writing-a-provider.md b/entity-framework/core/providers/writing-a-provider.md index d139d5f80c..132aeaad60 100644 --- a/entity-framework/core/providers/writing-a-provider.md +++ b/entity-framework/core/providers/writing-a-provider.md @@ -26,12 +26,6 @@ The EF team produces "community standup" videos, where we discuss various aspect * [IQueryable, LINQ and the EF Core query pipeline](https://www.youtube.com/watch?v=1Ld3dtnTrMw&list=PLdo4fOcmZ0oX0ObHwBrJ0vJpZ7PiYMqeA) * [Model Building](https://www.youtube.com/watch?v=FYz0rAxQkC8&list=PLdo4fOcmZ0oX0ObHwBrJ0vJpZ7PiYMqeA) -## Keeping up-to-date with provider changes - -Starting with work after the 2.1 release, we have created a [log of changes](xref:core/providers/provider-log) that may need corresponding changes in provider code. This is intended to help when updating an existing provider to work with a new version of EF Core. - -Prior to 2.1, we used the [`providers-beware`](https://github.com/dotnet/efcore/labels/providers-beware) and [`providers-fyi`](https://github.com/dotnet/efcore/labels/providers-fyi) labels on our GitHub issues and pull requests for a similar purpose. We will continue to use these labels on issues to give an indication which work items in a given release may also require work to be done in providers. A `providers-beware` label typically means that the implementation of a work item may break providers, while a `providers-fyi` label typically means that providers will not be broken, but code may need to be changed anyway, for example, to enable new functionality. - ## Suggested naming of third party providers We suggest using the following naming for NuGet packages. This is consistent with the names of packages delivered by the EF Core team. 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 65360c0fca..34972144d9 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 @@ -10,6 +10,10 @@ uid: core/what-is-new/ef-core-11.0/provider-facing-changes This page documents noteworthy changes in EF Core 11 which may affect EF providers; none of these should affect end-users of EF - this page is only meant for EF provider maintainers. The list is maintained on a best-effort basis, some changes may be missing. +## 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. + ## Test changes * The inheritance specification tests have been reorganized into a folder of their own ([PR](https://github.com/dotnet/efcore/pull/37410)). diff --git a/entity-framework/core/what-is-new/ef-core-3.x/breaking-changes.md b/entity-framework/core/what-is-new/ef-core-3.x/breaking-changes.md index cbd24794e2..89e92be083 100644 --- a/entity-framework/core/what-is-new/ef-core-3.x/breaking-changes.md +++ b/entity-framework/core/what-is-new/ef-core-3.x/breaking-changes.md @@ -9,7 +9,6 @@ uid: core/what-is-new/ef-core-3.x/breaking-changes # Breaking changes included in EF Core 3.x The following API and behavior changes have the potential to break existing applications when upgrading them to 3.x. -Changes that we expect to only impact database providers are documented under [provider changes](xref:core/providers/provider-log). ## Summary diff --git a/entity-framework/toc.yml b/entity-framework/toc.yml index 2d7c4eaf84..c355b57198 100644 --- a/entity-framework/toc.yml +++ b/entity-framework/toc.yml @@ -456,8 +456,6 @@ href: core/providers/in-memory/index.md - name: Write a database provider href: core/providers/writing-a-provider.md - - name: Provider-impacting changes - href: core/providers/provider-log.md - name: Tools & extensions href: core/extensions/index.md