微軟推出Microsoft.Data.SqlClient,替代System.Data.SqlClient

背景

在 .NET創建之初,System.Data框架是一個重要的組件。它爲創建 .NET數據庫驅動程序提供了一種方式,類似Visual Basic的ActiveX Data Objects。雖然API不一樣,但重用了它的名稱,所以纔有了ADO .NET這個綽號。

ADO和ADO .NET(即System.Data)之間的一個關鍵區別是對象模型。在ADO中,通常只需要使用ConnectionCommandRecordset對象,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 FAQ

原文鏈接

Introducing Microsoft.Data.SqlClient

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章