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