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