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