.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(\u0026quot;columnName\u0026quot;))

顯然(對有些人來說,早就該這樣了),簡化方式是提供一個字符串重載( string overload):

reader.GetInt32(\u0026quot;columnName\u0026quot;)

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”。

查看英文原文:System.Data in .NET Core 3.0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/252440.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/252440.shtml
英文地址,請注明出處:http://en.pswp.cn/news/252440.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

linux vg lv pv

pv由物理卷或者分區組成 pv可以組成一個或者多個vg vg可以分成多個lv 方便擴展 pvs vgs lvs 可以查看當前存在的pv vg lv 我的centos硬盤20g 使用了一段時間 加了100g 這時候 我們可以使用擴展來擴展我們的分區大小 查看自己擁有多少個硬盤 ls /dev/sd* | grep -v [0-9] …

mynt product model: D1000-IR-120標定相機和IMU外參

1. 首先是安裝相應的mynt SDK. http://www.myntai.com/mynteye/depth小覓官網,在sdk下拉菜單中點擊MYNT EYE Depth SDK,然后選擇Linux Installation安裝安裝步驟說明一步步的安裝,安裝sample后,測試一下安裝是否成功.我的電腦上安裝了ROS,所以可以點擊上面第一幅圖中的ROS Ins…

吉林省第二條國際鐵路聯運大通道“長琿歐”啟動測試

29日,吉林省第二條國際鐵路聯運大通道“長琿歐”在俄羅斯啟動測試。吉林省商務廳供圖 29日,吉林省第二條國際鐵路聯運大通道“長琿歐”在俄羅斯啟動測試。吉林省商務廳供圖 中新網長春1月29日電 (郭佳)記者29日從吉林省商務廳獲悉,該省第二條…

使用Ajax解析數據遇到的問題

數據格式 我最近在使用JQuery的$.ajax訪問后臺的時候,發現竟然無法解析返回的數據,具體的錯誤記不清了(以后在遇到問題先截個圖),可以在瀏覽器的Console中看到一個錯誤,但是去看這條請求是有數據返回的,所以剛開始我一…

49、劍指offer--把字符串轉換成整數

題目描述將一個字符串轉換成一個整數,要求不能使用字符串轉換整數的庫函數。 數值為0或者字符串不是一個合法的數值則返回0 輸入描述:輸入一個字符串,包括數字字母符號,可以為空輸出描述:如果是合法的數值表達則返回該數字,否則返回0輸入例子:2147483647…

Git丟棄修改

Git是如何跟蹤修改的&#xff1f;我們之前修改文件后都用到了兩個命令git add <file>、git commit&#xff0c;其實在Git中&#xff0c;每次修改后&#xff0c;如果不add到暫存區&#xff0c;那就不會加入到commit。 查看一下文件內容&#xff1a; 在其中添加一行記錄…

隱藏界面沒有必要應用場景

轉載于:https://www.cnblogs.com/zengsf/p/8366572.html

mynt product model: D1000-IR-120標定相機和IMU外參之二

1. 在之一中使用kalibr標定mynt相機和內置imu的外參數,使用的是720p,30fps的雙目圖像和200hz的imu數據,標定結果誤差比較大,這一次我們改用480p,60hz的雙目圖像和200hz的imu數據進行標定,需要在mynt_sdk中的mynteye.launch中進行如下修改. 默認獲取圖像的2560x720,30fps&#…

AODp

一、AOP是OOP的延續&#xff0c;是&#xff08;Aspect Oriented Programming&#xff09;的縮寫&#xff0c;意思是面向切面編程。 AOP&#xff08;Aspect Orient Programming&#xff09;&#xff0c;作為面向對象編程的一種補充&#xff0c;廣泛應用于處理一些具有橫切性質的…

[洛谷P4174][NOI2006]最大獲利

題目大意&#xff1a;同Petya and Graph&#xff0c;數據范圍改成$n\leqslant5\times10^3,m\leqslant5\times10^4$ 題解&#xff1a;同上 卡點&#xff1a;無 C Code&#xff1a; #include <algorithm> #include <cstdio> #define maxn 5010 #define maxm 50010 co…

使用ros發布UVC相機和串口IMU數據

&#xff11;&#xff0e;目的&#xff1a;為了可以標定普通USB相機和固定在相機上的外置IMU的外參,我希望通過ROS獲取更高分辨率和更高頻率的圖像數據,并且可以將圖像和imu的topic發布出來,直接使用rosbag record錄制話題數據,寫入bag文件,這樣獲得的bag文件直接可以用于相機和…

API自動化測試利器——Postman

自從開始做API開發之后&#xff0c;我就在尋找合適的API測試工具。一開始不是很想用Chrome擴展&#xff0c;用的WizTools的工具&#xff0c;后來試過一次Postman之后就停不下來了&#xff0c;還買了付費的Jetpacks。推出Team Sync Beta之后我又把這個工具推廣給團隊&#xff0c…

gcc,cc,g++,CC的區別

***gcc是C編譯器&#xff1b; ***g是C編譯器&#xff1b; ***linux下cc一般是一個符號連接&#xff0c;指向gcc ***gcc說明 1.gcc編譯常用格式&#xff1a; gcc C源文件 -o 目標文件 或 gcc -o 目標文件 C源文件 或 gcc C源文件 最后一種情況產生的目標文件默認為a.out 2.gcc…

云原生實踐之 RSocket 從入門到落地:Servlet vs RSocket

技術實踐的作用在于&#xff1a;除了用于構建業務&#xff0c;也是為了驗證某項技術或框架是否值得大規模推廣。 本期開始&#xff0c;我們推出《RSocket 從入門到落地》系列文章&#xff0c;通過實例和對比來介紹RSocket。主要圍繞RSocket如何實現Polyglot RPC、Service Regis…

制作.sens數據集跑通bundlefusion

1. 主要參考這篇博客實現 https://blog.csdn.net/Wuzebiao2016/article/details/94426905 2. 首先就是將自己采集的RGBD圖像的保存格式向Bundlefusion需要的格式對齊&#xff0c;如彩色圖的命名格式是frame-000000.color.png&#xff0c;深度圖的命名規則是frame-000000.depth…

用ul li實現邊框重合并附帶鼠標經過效果

邊框重合這個效果并不難&#xff0c;只是我們沒有真正的動手做過而已&#xff0c;下面讓我們來談談用ul li如何實現邊框重合&#xff0c;并附帶鼠標經過效果 1 <!DOCTYPE html>2 <html lang"zh-CN">3 4 <head>5 <title></title>6 …

hive 中窗口函數row_number,rank,dense_ran,ntile分析函數的用法

https://www.cnblogs.com/wujin/p/6051768.html轉載于:https://www.cnblogs.com/0xcafedaddy/p/8385476.html

python之moviepy庫的安裝與使用

目的&#xff1a;因為需要保存一個大大的.mp4視頻&#xff0c;以防過程中設備出現異常導致整個長長的視頻無法正常保存&#xff0c;所以采用分段保存視頻的方式&#xff0c;每500幀保存一段&#xff0c;然后再將視頻合到一起&#xff0e;最近剛開始學習python,發現python真的很…

oracle 之 安裝后pl/sql登錄報ora-12154

這個問題一開始困擾了很久。 查的資料是復制一小段代碼到tnsnames.ora中 SID名 (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST localhost)(PORT 1522)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME SID名) ) 注意SID名前面不能有任何其他字符&…

如何避免表單重復提交

客戶端方案 禁掉提交按鈕。 表單提交后使用Javascript使提交按鈕disable。這種方法防止心急的用戶多次點擊按鈕。但有個問題&#xff0c;如果客戶端把Javascript給禁止掉&#xff0c;這種方法就無效了。 使用Post/Redirect/Get模式 在提交后執行頁面重定向&#xff0c;這就是所…