From 98052184c02019eaa581a97a769bf50fba6c1754 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Mar 2026 21:26:38 +0000 Subject: [PATCH 1/6] Add Microsoft.Data.Sqlite breaking changes section for SQLitePCLRaw 3.x to EF Core 11.0 Co-authored-by: AndriySvyryd <6539701+AndriySvyryd@users.noreply.github.com> Agent-Logs-Url: https://github.com/dotnet/EntityFramework.Docs/sessions/dbab271d-ed3a-42c0-86ae-3a22aeddeecc --- .../ef-core-11.0/breaking-changes.md | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md b/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md index 6b21720370..72bdf86e90 100644 --- a/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md +++ b/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md @@ -43,3 +43,116 @@ Synchronous blocking on asynchronous methods ("sync-over-async") is highly disco ##### Mitigations Convert your code to use async I/O APIs instead of sync I/O ones. For example, replace calls to `SaveChanges()` with `await SaveChangesAsync()`. + + + +## Microsoft.Data.Sqlite breaking changes + +### Summary + +| **Breaking change** | **Impact** | +|:----------------------------------------------------------------------------------------------------------|------------| +| [Encryption-enabled SQLite bundle packages have been removed](#sqlite-encryption-removed) | High | +| [Some SQLitePCLRaw bundle packages have been removed](#sqlite-bundles-removed) | Medium | + +### High-impact changes + + + +#### Encryption-enabled SQLite bundle packages have been removed + +[Tracking Issue #5108](https://github.com/dotnet/EntityFramework.Docs/issues/5108) + +##### Old behavior + +Previously, the `SQLitePCLRaw.bundle_e_sqlcipher` and `SQLitePCLRaw.bundle_e_sqlite3mc` NuGet packages provided encryption-enabled SQLite builds at no cost. + +##### New behavior + +Starting with SQLitePCLRaw 3.0 (used by Microsoft.Data.Sqlite 11.0), the `SQLitePCLRaw.bundle_e_sqlcipher` and `SQLitePCLRaw.bundle_e_sqlite3mc` packages have been deprecated and removed from NuGet. No-cost encryption-enabled SQLite builds are no longer distributed. + +##### Why + +The maintainer of SQLitePCLRaw no longer distributes encryption-enabled SQLite builds without cost. + +##### Mitigations + +If you need SQLite encryption, you have the following options: + +- **SQLite Encryption Extension (SEE)**: This is the official encryption implementation from the SQLite team. A paid license is required. See [sqlite.org/com/see.html](https://sqlite.org/com/see.html) for details. NuGet packages are available through [SourceGear's SQLite build service](https://github.com/ericsink/SQLitePCL.raw/wiki/SQLite-encryption-options-for-use-with-SQLitePCLRaw). +- **SQLCipher**: Purchase supported builds from [Zetetic](https://www.zetetic.net/sqlcipher/), or build the [open source code](https://github.com/sqlcipher/sqlcipher) yourself. +- **SQLite3 Multiple Ciphers**: NuGet packages are available to customers of [SourceGear's SQLite build service](https://github.com/ericsink/SQLitePCL.raw/wiki/SQLite-encryption-options-for-use-with-SQLitePCLRaw). + +For more details, see [SQLite encryption options for use with SQLitePCLRaw](https://github.com/ericsink/SQLitePCL.raw/wiki/SQLite-encryption-options-for-use-with-SQLitePCLRaw) and [SQLitePCLRaw 3.0 Release Notes](https://github.com/ericsink/SQLitePCL.raw/blob/main/v3.md). + +### Medium-impact changes + + + +#### Some SQLitePCLRaw bundle packages have been removed + +[Tracking Issue #5108](https://github.com/dotnet/EntityFramework.Docs/issues/5108) + +##### Old behavior + +Previously, the `SQLitePCLRaw.bundle_sqlite3`, `SQLitePCLRaw.bundle_winsqlite3`, and `SQLitePCLRaw.bundle_green` packages provided a convenient way to configure SQLitePCLRaw with the corresponding SQLite provider. + +##### New behavior + +Starting with SQLitePCLRaw 3.0 (used by Microsoft.Data.Sqlite 11.0), these bundle packages have been removed. If your application depended on one of these bundles, you must now reference the corresponding provider package and explicitly initialize it. + +##### Why + +Each of these bundle packages contained only a single line of configuration code and added unnecessary packaging overhead. The corresponding provider packages are still supported. + +##### Mitigations + +Replace the removed bundle package with the corresponding provider package and add explicit initialization code. + +**If using `bundle_sqlite3` or `bundle_winsqlite3`**, replace the package reference: + +```xml + + + + + + + + + + + +``` + +Then add explicit initialization before using SQLite: + +```csharp +// For sqlite3 +SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlite3()); + +// For winsqlite3 +SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_winsqlite3()); +``` + +**If using `bundle_green`**, the recommended migration path is to switch to `SQLitePCLRaw.bundle_e_sqlite3` (or `SQLitePCLRaw.config.e_sqlite3` with `SourceGear.sqlite3`): + +```xml + +``` + +If you only target iOS and want to continue using the system SQLite library, reference the provider directly: + +```xml + + +``` + +And initialize it explicitly: + +```csharp +SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlite3()); +``` + +> [!NOTE] +> If you are using `SQLitePCLRaw.bundle_e_sqlite3`, no changes are required—just update the version number. See the [SQLitePCLRaw 3.0 Release Notes](https://github.com/ericsink/SQLitePCL.raw/blob/main/v3.md) for details. From c04d552b90b8aeac432d340009ffd8e3d4b5a214 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Mar 2026 21:27:43 +0000 Subject: [PATCH 2/6] Address code review feedback: fix SEE link and clarify config vs bundle packages Co-authored-by: AndriySvyryd <6539701+AndriySvyryd@users.noreply.github.com> Agent-Logs-Url: https://github.com/dotnet/EntityFramework.Docs/sessions/dbab271d-ed3a-42c0-86ae-3a22aeddeecc --- .../core/what-is-new/ef-core-11.0/breaking-changes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md b/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md index 72bdf86e90..3f5dcde83c 100644 --- a/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md +++ b/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md @@ -79,7 +79,7 @@ The maintainer of SQLitePCLRaw no longer distributes encryption-enabled SQLite b If you need SQLite encryption, you have the following options: -- **SQLite Encryption Extension (SEE)**: This is the official encryption implementation from the SQLite team. A paid license is required. See [sqlite.org/com/see.html](https://sqlite.org/com/see.html) for details. NuGet packages are available through [SourceGear's SQLite build service](https://github.com/ericsink/SQLitePCL.raw/wiki/SQLite-encryption-options-for-use-with-SQLitePCLRaw). +- **SQLite Encryption Extension (SEE)**: This is the official encryption implementation from the SQLite team. A paid license is required. See [https://sqlite.org/com/see.html](https://sqlite.org/com/see.html) for details. NuGet packages are available through [SourceGear's SQLite build service](https://github.com/ericsink/SQLitePCL.raw/wiki/SQLite-encryption-options-for-use-with-SQLitePCLRaw). - **SQLCipher**: Purchase supported builds from [Zetetic](https://www.zetetic.net/sqlcipher/), or build the [open source code](https://github.com/sqlcipher/sqlcipher) yourself. - **SQLite3 Multiple Ciphers**: NuGet packages are available to customers of [SourceGear's SQLite build service](https://github.com/ericsink/SQLitePCL.raw/wiki/SQLite-encryption-options-for-use-with-SQLitePCLRaw). @@ -135,7 +135,7 @@ SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlite3()); SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_winsqlite3()); ``` -**If using `bundle_green`**, the recommended migration path is to switch to `SQLitePCLRaw.bundle_e_sqlite3` (or `SQLitePCLRaw.config.e_sqlite3` with `SourceGear.sqlite3`): +**If using `bundle_green`**, the recommended migration path is to switch to `SQLitePCLRaw.bundle_e_sqlite3`. Alternatively, use `SQLitePCLRaw.config.e_sqlite3` paired with a separate native library package like `SourceGear.sqlite3`, which allows you to update the SQLite version independently: ```xml From 221bd8feb197c74cb068b88d729e4fac8ef47c4e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 20 Mar 2026 22:06:06 +0000 Subject: [PATCH 3/6] Address PR review: move bundle_e_sqlite3mc, rename heading, add summary NOTE, use version placeholders Co-authored-by: AndriySvyryd <6539701+AndriySvyryd@users.noreply.github.com> Agent-Logs-Url: https://github.com/dotnet/EntityFramework.Docs/sessions/017b552e-558b-41e9-a54d-d8ad50f8b282 --- .../ef-core-11.0/breaking-changes.md | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md b/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md index 3f5dcde83c..a667c0fd89 100644 --- a/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md +++ b/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md @@ -16,6 +16,9 @@ This page documents API and behavior changes that have the potential to break ex ## Summary +> [!NOTE] +> If you are using Microsoft.Data.Sqlite, please see the [separate section below on Microsoft.Data.Sqlite breaking changes](#MDS-breaking-changes). + | **Breaking change** | **Impact** | |:--------------------------------------------------------------------------------------------------------------- | -----------| | [Sync I/O via the Azure Cosmos DB provider has been fully removed](#cosmos-nosync) | Medium | @@ -52,24 +55,24 @@ Convert your code to use async I/O APIs instead of sync I/O ones. For example, r | **Breaking change** | **Impact** | |:----------------------------------------------------------------------------------------------------------|------------| -| [Encryption-enabled SQLite bundle packages have been removed](#sqlite-encryption-removed) | High | +| [Encryption-enabled SQLite packages have been removed](#sqlite-encryption-removed) | High | | [Some SQLitePCLRaw bundle packages have been removed](#sqlite-bundles-removed) | Medium | ### High-impact changes -#### Encryption-enabled SQLite bundle packages have been removed +#### Encryption-enabled SQLite packages have been removed [Tracking Issue #5108](https://github.com/dotnet/EntityFramework.Docs/issues/5108) ##### Old behavior -Previously, the `SQLitePCLRaw.bundle_e_sqlcipher` and `SQLitePCLRaw.bundle_e_sqlite3mc` NuGet packages provided encryption-enabled SQLite builds at no cost. +Previously, the `SQLitePCLRaw.bundle_e_sqlcipher` NuGet package provided encryption-enabled SQLite builds at no cost. ##### New behavior -Starting with SQLitePCLRaw 3.0 (used by Microsoft.Data.Sqlite 11.0), the `SQLitePCLRaw.bundle_e_sqlcipher` and `SQLitePCLRaw.bundle_e_sqlite3mc` packages have been deprecated and removed from NuGet. No-cost encryption-enabled SQLite builds are no longer distributed. +Starting with SQLitePCLRaw 3.0 (used by Microsoft.Data.Sqlite 11.0), the `SQLitePCLRaw.bundle_e_sqlcipher` package has been deprecated and removed from NuGet. No-cost encryption-enabled SQLite builds are no longer distributed. ##### Why @@ -95,7 +98,7 @@ For more details, see [SQLite encryption options for use with SQLitePCLRaw](http ##### Old behavior -Previously, the `SQLitePCLRaw.bundle_sqlite3`, `SQLitePCLRaw.bundle_winsqlite3`, and `SQLitePCLRaw.bundle_green` packages provided a convenient way to configure SQLitePCLRaw with the corresponding SQLite provider. +Previously, the `SQLitePCLRaw.bundle_sqlite3`, `SQLitePCLRaw.bundle_winsqlite3`, `SQLitePCLRaw.bundle_green`, and `SQLitePCLRaw.bundle_e_sqlite3mc` packages provided a convenient way to configure SQLitePCLRaw with the corresponding SQLite provider. ##### New behavior @@ -118,11 +121,11 @@ Replace the removed bundle package with the corresponding provider package and a - - + + - - + + ``` Then add explicit initialization before using SQLite: @@ -138,14 +141,14 @@ SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_winsqlite3()); **If using `bundle_green`**, the recommended migration path is to switch to `SQLitePCLRaw.bundle_e_sqlite3`. Alternatively, use `SQLitePCLRaw.config.e_sqlite3` paired with a separate native library package like `SourceGear.sqlite3`, which allows you to update the SQLite version independently: ```xml - + ``` If you only target iOS and want to continue using the system SQLite library, reference the provider directly: ```xml - - + + ``` And initialize it explicitly: From 221d36779ef54c93e852e2d99e61a143fe5241fb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 21 Mar 2026 01:10:04 +0000 Subject: [PATCH 4/6] Change encryption breaking change from high-impact to medium-impact Co-authored-by: AndriySvyryd <6539701+AndriySvyryd@users.noreply.github.com> Agent-Logs-Url: https://github.com/dotnet/EntityFramework.Docs/sessions/5229d289-4b00-4366-afa4-577551273705 --- .../core/what-is-new/ef-core-11.0/breaking-changes.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md b/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md index a667c0fd89..36d45af0f5 100644 --- a/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md +++ b/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md @@ -55,10 +55,10 @@ Convert your code to use async I/O APIs instead of sync I/O ones. For example, r | **Breaking change** | **Impact** | |:----------------------------------------------------------------------------------------------------------|------------| -| [Encryption-enabled SQLite packages have been removed](#sqlite-encryption-removed) | High | +| [Encryption-enabled SQLite packages have been removed](#sqlite-encryption-removed) | Medium | | [Some SQLitePCLRaw bundle packages have been removed](#sqlite-bundles-removed) | Medium | -### High-impact changes +### Medium-impact changes @@ -88,8 +88,6 @@ If you need SQLite encryption, you have the following options: For more details, see [SQLite encryption options for use with SQLitePCLRaw](https://github.com/ericsink/SQLitePCL.raw/wiki/SQLite-encryption-options-for-use-with-SQLitePCLRaw) and [SQLitePCLRaw 3.0 Release Notes](https://github.com/ericsink/SQLitePCL.raw/blob/main/v3.md). -### Medium-impact changes - #### Some SQLitePCLRaw bundle packages have been removed From 0346dd8a92abb510fab2faa1a56c381c56ba4691 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 21 Mar 2026 01:25:03 +0000 Subject: [PATCH 5/6] Wrap SetProvider calls in static Init methods for ease of use Co-authored-by: AndriySvyryd <6539701+AndriySvyryd@users.noreply.github.com> Agent-Logs-Url: https://github.com/dotnet/EntityFramework.Docs/sessions/48d9b916-11ee-4e7e-b515-e8eb3b5b0ccd --- .../what-is-new/ef-core-11.0/breaking-changes.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md b/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md index 36d45af0f5..f52610cfb4 100644 --- a/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md +++ b/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md @@ -130,10 +130,16 @@ Then add explicit initialization before using SQLite: ```csharp // For sqlite3 -SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlite3()); +static void Init() +{ + SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlite3()); +} // For winsqlite3 -SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_winsqlite3()); +static void Init() +{ + SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_winsqlite3()); +} ``` **If using `bundle_green`**, the recommended migration path is to switch to `SQLitePCLRaw.bundle_e_sqlite3`. Alternatively, use `SQLitePCLRaw.config.e_sqlite3` paired with a separate native library package like `SourceGear.sqlite3`, which allows you to update the SQLite version independently: @@ -152,7 +158,10 @@ If you only target iOS and want to continue using the system SQLite library, ref And initialize it explicitly: ```csharp -SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlite3()); +static void Init() +{ + SQLitePCL.raw.SetProvider(new SQLitePCL.SQLite3Provider_sqlite3()); +} ``` > [!NOTE] From df30e0abee21e23bf214f16b8c77c3c11fd46f9f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 24 Mar 2026 15:19:53 +0000 Subject: [PATCH 6/6] Add context on sqlcipher removal and clarify SQLitePCLRaw is community-maintained Co-authored-by: AndriySvyryd <6539701+AndriySvyryd@users.noreply.github.com> Agent-Logs-Url: https://github.com/dotnet/EntityFramework.Docs/sessions/385d7c18-9fef-49f4-81c7-3bab1ff391b8 --- .../core/what-is-new/ef-core-11.0/breaking-changes.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md b/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md index f52610cfb4..3bd6a80183 100644 --- a/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md +++ b/entity-framework/core/what-is-new/ef-core-11.0/breaking-changes.md @@ -51,6 +51,9 @@ Convert your code to use async I/O APIs instead of sync I/O ones. For example, r ## Microsoft.Data.Sqlite breaking changes +> [!NOTE] +> [SQLitePCLRaw](https://github.com/ericsink/SQLitePCL.raw) is an external, community-maintained library that is not owned or maintained by Microsoft. Microsoft.Data.Sqlite depends on it for its SQLite connectivity. + ### Summary | **Breaking change** | **Impact** | @@ -76,7 +79,7 @@ Starting with SQLitePCLRaw 3.0 (used by Microsoft.Data.Sqlite 11.0), the `SQLite ##### Why -The maintainer of SQLitePCLRaw no longer distributes encryption-enabled SQLite builds without cost. +The previous no-cost `SQLitePCLRaw.bundle_e_sqlcipher` package was barely maintained, which is a significant concern for encryption software where security vulnerabilities may go unpatched. The SQLitePCLRaw maintainer removed these builds in version 3.0 in favor of professionally maintained, paid alternatives that provide ongoing security updates. ##### Mitigations