您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關.NET Core 3.0 中的數據庫驅動框架System.Data是怎樣的,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
雖然沒有得到很多關注,但System.Data對于.NET 中任何關系型數據庫的訪問都至關重要。因為其前身是 ActiveX Data Objects,所以它也被稱為 ADO.NET。System.Data 提供了一個通用框架,是構建.NET 數據庫驅動程序的基礎。該框架提供了數據庫驅動可以遵循的具體規范。
連接、命令和數據讀取器都基于雙重繼承模式。它們分別從 DbConnection、DbCommand 和 DbDataReader 繼承了一些基本功能。它們還實現了抽象接口 IDbConnection、IDbCommand 和 IDbDataReader,這些接口可以模擬場景和非傳統數據源。這種雙重繼承模式也適用于下面描述的所有基類。
雖然連接字符串通常被視為字符串,但有一些工具可以將它們表示為從 DbConnectionStringBuilder 繼承的對象。這可以處理特定數據庫的連接字符串解析,并使開發人員可以更好地了解特定數據庫提供的設置。
System.Data 早于 ORMs for .NET,但它確實提供了一種通過實現 DbDataAdapter 和 DbCommandBuilder 類生成 SQL 的通用方法。這既可以直接使用,也可以與普通數據集和類型化數據集結合使用。
如果你正在尋找抽象工廠模式的真實示例,請查看 DbProviderFactory。它的子類提供了連接、命令、命令參數、命令構建器和數據適配器。基本上是數據訪問所需的一切,而不需要特定于數據庫的邏輯。
接口的問題
如上所述,System.Data 依賴于雙重繼承。在添加新方法時,這可能是一個問題。例如,.NET 4.5 中的 DbCommand 增加了異步操作。但是,它們無法添加到相應的 IDbCommand 接口中,因為這將是一個破壞性更改。這意味著你不能同時使用異步操作和容易模擬的抽象接口。
微軟本可以在.NET Core 1.0 中一次性重置抽象接口,使其與抽象類相匹配(Java 過去在 JDBC 接口中就這樣做過)。然而,這會使與.NET Framework 共享代碼變得困難。
如果 C# 8 中包含默認接口方法,那么理論上可以使用它們以向后兼容的方式重新組合接口。但是,由于默認接口方法是.NET Core 才有的特性,所以它與.NET Framework 不兼容,也就不能用于舊的編譯器和其他.NET 語言。
DbDataReader.Get() 字符串重載 #31595*
.NET Core 3.0 的第一個特性是能夠將列名傳遞給 DbDataReader.GetXXX 方法。長期以來,人們一直抱怨這個接口不能按名稱引用列。這意味著你需要使用下面這個模式:
reader.GetInt32(reader.GetOrdinal("columnName"))
顯然(對有些人來說,早就該這樣了),簡化方式是提供一個字符串重載( string overload):
reader.GetInt32("columnName")
Oracle 的 Connector/NET 和MySqlConnector已經這樣做了。
因為性能原因,這個新方法不會被標記為 virtual,從而使 JIT 編譯器可以輕松地將它內聯。由于上述原因,新的方法集不會添加到 IDbDataReader 中。
XmlDataDocument #33442
如果你了解XmlDataDocument的歷史,那么這似乎是一個奇怪的選擇。自從.NET 4.0 在 2010 年發布以來,它就已經被標記為過時,并警告說“XmlDataDocument 類將在未來的版本中被刪除”。
現在重新開始使用它的原因是一些 WinForms 和 WPF 應用程序在使用它。Bug 報告顯示,“它在 Apiport 的不同類別中有 1-7% 的使用率。”
DatasetExtensions
.NET Core 3 中沒有的一個特性是DataTableExtensions類。雖然看起來非常簡單,只有 6 個擴展方法,但是如果不修改 System.Data 本身,就無法構建 AsDataView。原因相當復雜,涉及內部方法、類型轉發和.NET 標準帶來的挑戰。
如果你感興趣,可以看下相關的話題,包括“將 DatasetExtensions 移植到.NET Core #19771”、“移植 DataTable.AsDataView 擴展方法 #27610”和“公開涉及在 DataView 中進行鍵搜索的內部虛擬方法 #31764”。
以上就是.NET Core 3.0 中的數據庫驅動框架System.Data是怎樣的,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。