會影響提供者的變更
此頁面包含 EF Core 存放庫上提出的提取要求連結,這些要求可能需要其他資料庫提供者的作者做出反應。 其目的是在將提供者更新為新版本時,為現有協力廠商資料庫提供者的作者提供起點。
我們將從 2.1 變更為 2.2 開始此記錄。 在 2.1 之前,我們在 providers-beware
問題和提取要求上使用 和 providers-fyi
標籤。
2.2 --- > 3.x
請注意,許多 應用層級的重大變更 也會影響提供者。
- https://github.com/dotnet/efcore/pull/14022
- 已移除過時的 API 和折迭的選擇性參數多載
- 已移除 DatabaseColumn.GetUnderlyingStoreType()
- https://github.com/dotnet/efcore/pull/14589
- 已移除過時的 API
- https://github.com/dotnet/efcore/pull/15044
- CharTypeMapping 的子類別可能已中斷,因為修正基底實作中幾個 Bug 所需的行為變更。
- https://github.com/dotnet/efcore/pull/15090
- 已新增 IDatabaseModelFactory 的基類,並將其更新為使用 paramater 物件來減輕未來的中斷。
- https://github.com/dotnet/efcore/pull/15123
- 在 MigrationsSqlGenerator 中使用參數物件來減輕未來的中斷。
- https://github.com/dotnet/efcore/pull/14972
- 明確設定記錄層級需要對提供者可能使用的 API 進行一些變更。 具體來說,如果提供者直接使用記錄基礎結構,這項變更可能會中斷該使用。 此外,未來使用基礎結構(將會公開)的提供者將需要衍生自
LoggingDefinitions
或RelationalLoggingDefinitions
。 如需範例,請參閱 SQL Server 和記憶體內部提供者。
- 明確設定記錄層級需要對提供者可能使用的 API 進行一些變更。 具體來說,如果提供者直接使用記錄基礎結構,這項變更可能會中斷該使用。 此外,未來使用基礎結構(將會公開)的提供者將需要衍生自
- https://github.com/dotnet/efcore/pull/15091
- 核心、關聯式和抽象資源字串現在為公用。
CoreLoggerExtensions
和RelationalLoggerExtensions
現在是公用的。 提供者應該在記錄在核心或關聯式層級定義的事件時使用這些 API。 請勿直接存取記錄資源;這些仍然是內部的。IRawSqlCommandBuilder
已從單一服務變更為範圍服務IMigrationsSqlGenerator
已從單一服務變更為範圍服務
- https://github.com/dotnet/efcore/pull/14706
- 建置關聯式命令的基礎結構已公開,因此提供者可以安全地使用它,並稍微重構。
- https://github.com/dotnet/efcore/pull/14733
ILazyLoader
已從範圍服務變更為暫時性服務
- https://github.com/dotnet/efcore/pull/14610
IUpdateSqlGenerator
已從範圍服務變更為單一服務- 此外,
ISingletonUpdateSqlGenerator
已移除
- https://github.com/dotnet/efcore/pull/15067
- 提供者所使用的許多內部程式碼現在已公開
- 它不應該再被參考
IndentedStringBuilder
,因為它已經考慮了暴露它的地方 NonCapturingLazyInitializer
的使用方式應該從 BCL 取代為LazyInitializer
- https://github.com/dotnet/efcore/pull/14608
- 這項變更完全涵蓋在應用程式重大變更檔中。 對於提供者而言,這可能會影響,因為測試 EF 核心通常會導致發生此問題,因此測試基礎結構已變更,使其不太可能。
- https://github.com/dotnet/efcore/issues/13961
EntityMaterializerSource
已簡化
- https://github.com/dotnet/efcore/pull/14895
- StartsWith 翻譯已以提供者可能想要/需要回應的方式變更
- https://github.com/dotnet/efcore/pull/15168
- 慣例集服務已變更。 提供者現在應該繼承自 「ProviderConventionSet」 或 「RelationalConventionSet」。
- 您可以透過
IConventionSetCustomizer
服務新增自訂專案,但這是供其他延伸模組使用,而非提供者使用。 - 執行時間所使用的慣例應該從
IConventionSetBuilder
解析。
- https://github.com/dotnet/efcore/pull/15288
- 資料植入已重構為公用 API,以避免需要使用內部類型。 這應該只會影響非關聯式提供者,因為植入是由所有關系型提供者的基底關聯式類別處理。
2.1 --- > 2.2
僅限測試的變更
- https://github.com/dotnet/efcore/pull/12057 - 在測試中允許可自訂的 SQL Delimeter
- 測試允許 BuiltInDataTypesTestBase 中非嚴格浮點比較的變更
- 測試變更,可讓查詢測試與不同的 SQL delimeters 重複使用
- https://github.com/dotnet/efcore/pull/12072 - 將 DbFunction 測試新增至關聯式規格測試
- 因此,這些測試可以針對所有資料庫提供者執行
- https://github.com/dotnet/efcore/pull/12362 - 非同步測試清除
- 移除
Wait
呼叫、不需要的非同步,並重新命名一些測試方法
- 移除
- https://github.com/dotnet/efcore/pull/12666 - 統一記錄測試基礎結構
- 已新增
CreateListLoggerFactory
並移除一些先前的記錄基礎結構,這需要提供者使用這些測試來做出反應
- 已新增
- https://github.com/dotnet/efcore/pull/12500 - 以同步和非同步方式執行更多查詢測試
- 測試名稱和分解已變更,這需要提供者使用這些測試來做出反應
- https://github.com/dotnet/efcore/pull/12766 - 在 ComplexNavigations 模型中重新命名導覽
- 使用這些測試的提供者可能需要做出反應
- https://github.com/dotnet/efcore/pull/12141 - 將內容傳回集區,而不是在功能測試中處置
- 這項變更包含一些測試重構,可能需要提供者做出反應
測試和產品名稱變更
- https://github.com/dotnet/efcore/pull/12109 - 合併 RelationalTypeMapping.Clone 方法
- 2.1 對 RelationalTypeMapping 的變更,允許在衍生類別中簡化。 我們不認為這會中斷提供者,但提供者可以利用其衍生類型對應類別中的這項變更。
- https://github.com/dotnet/efcore/pull/12069 - 標記或具名查詢
- 新增用於標記 LINQ 查詢的基礎結構,並讓這些標籤顯示為 SQL 中的批註。 這可能需要提供者在 SQL 產生時做出反應。
- https://github.com/dotnet/efcore/pull/13115 - 透過 NTS 支援空間資料
- 允許在提供者外部註冊類型對應和成員翻譯工具
- 提供者必須呼叫基底。FindMapping() 在其 ITypeMappingSource 實作中運作
- 請遵循此模式,將空間支援新增至跨提供者一致的提供者。
- 允許在提供者外部註冊類型對應和成員翻譯工具
- https://github.com/dotnet/efcore/pull/13199 - 為服務提供者建立新增增強的偵錯
- 允許 DbCoNtextOptionsExtensions 實作新的介面,以協助人們瞭解內部服務提供者重建的原因
- https://github.com/dotnet/efcore/pull/13289- 新增 Can連線 API 以供健康情況檢查使用
- 此 PR 會新增 ASP.NET Core 健康情況檢查所使用的概念
CanConnect
,以判斷資料庫是否可用。 根據預設,關聯式實作只會呼叫Exist
,但提供者可以視需要實作不同的專案。 非關聯式提供者必須實作新的 API,才能使用健康情況檢查。
- 此 PR 會新增 ASP.NET Core 健康情況檢查所使用的概念
- https://github.com/dotnet/efcore/pull/13306 - 將基底 RelationalTypeMapping 更新為未設定 DbParameter 大小
- 預設停止設定 [大小],因為它可能會導致截斷。 如果需要設定 Size,提供者可能需要新增自己的邏輯。
- https://github.com/dotnet/efcore/pull/13372 - RevEng:永遠指定十進位資料行的資料行類型
- 一律在 Scaffold 程式碼中設定十進位資料行的資料行類型,而不是依照慣例進行設定。
- 提供者不應該在其端要求任何變更。
- https://github.com/dotnet/efcore/pull/13469 - 新增 CaseExpression 以產生 SQL CASE 運算式
- https://github.com/dotnet/efcore/pull/13648 - 新增在 SqlFunctionExpression 上指定類型對應的能力,以改善引數和結果的存放區類型推斷。