微软推出 Microsoft.Data.SqlClient,替代 System.Data.SqlClient
背景
在 .NET 創建之初,System.Data 框架是一個重要的組件。它為創建 .NET 數據庫驅動程序提供了一種方式,類似 Visual Basic 的 ActiveX Data Objects。雖然 API 不一樣,但重用了它的名稱,所以才有了 ADO .NET 這個綽號。
ADO 和 ADO .NET(即 System.Data)之間的一個關鍵區別是對象模型。在 ADO 中,通常只需要使用 Connection 、 Command 和 Recordset 對象,OleDB/ODBC 驅動程序隱藏掉了其他東西。這提高了代碼復用率,但開發人員難以將一些數據庫特性暴露出來。
在 ADO .NET 中,你也可以使用 OleDB/ODBC,但在大多數情況下會使用一系列特定于數據庫的類。這些類派生自 DBConnection、DBCommand 和 DBDataReader,可以保持原來的代碼復用性。但因為它們是強命名類型,需要顯式地作為 .NET 庫的一部分。
可能是為了簡化開發,SQL Server、OleDB 和 ODBC 驅動程序同時作為 System.Data 框架的一部分。這種方式在當時是可以接受的,但卻給現在的 SQL Server 開發周期帶來了問題。
實際上,SQL Server 的發布周期已經從 3 年到 5 年變成了幾乎每年一次。發布的新版本通常需要更新 .NET 驅動程序,如果它被綁定到 .NET 標準發布周期中,這就不可能及時發布。
第一步是拆分 System.Data 庫。.NET Core 完成了這一步,為每個數據庫驅動程序提供了單獨的庫。下一步是將 SQL Server 驅動程序與 .NET Core/Standard 完全分離。為此,他們創建了 Microsoft.Data.SqlClient。
升級到 Microsoft.Data.SqlClient
對于大多數開發人員來說,使用 Microsoft.Data.SqlClient 將會變得非常簡單,只需要修改每個類頂部的 using 語句即可。另外,它使用了相同的類名和 API,并提供了大致相同的特性。
對于輕量級 ORM,如 Dapper 或 RepoDB,不需要做進一步的改動。
如果開發人員使用 ORM 來管理連接(例如 EF、NHibernate),就需要等待 ORM 升級。
比較麻煩的是那些混合 ORM。如果一個 ORM 使用了 Microsoft.Data.SqlClient,而另一個使用了 System.Data.SqlClient,就不能同時正常運行。這在使用共享 SqlTransaction 對象時尤為重要。
可用性
1.0 版 Microsoft.Data.SqlClient 可用于這些平臺:
.NET Framework 4.6+
.NET Core 2.1+
.NET Standard 2.0+
已知問題
并不是每個人都需要馬上升級。文檔中指出了這些已知問題:
用戶數據類型(UDT)可能無法與 Microsoft.Data.SqlClient 一起使用。
Azure Key Vault 和 Microsoft.Data.SqlClient 沒有密鑰存儲。
Microsoft.Data.SqlClient 不支持安全飛地的 Always Encrypted。
只有 .NET Framework 和 .NET Core 支持 Always Encrypted, .NET Standard 不支持,因為 .NET Standard 缺少某些加密依賴項。
總結
以上是生活随笔為你收集整理的微软推出 Microsoft.Data.SqlClient,替代 System.Data.SqlClient的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Core 3.0 新 JSON
- 下一篇: 你必须知道的容器监控 (1) Docke