引用內容
1 DataProvider綜述
1.1 背景
1.1.1 頭痛的事情
從無到有的建立資料訪問層
沒有剝離業務的資料訪問層,開發很容易,維護極困難
傳統的ADO.NET雖然強大,但是在開發效率和開發難度上並不盡如人意
資料庫表數量多,關係複雜,資料訪問層工作量非常大
SQL代碼往往在運行時才發現錯誤,而非期待的編譯階段,影響項目品質
Debug時一直要追蹤到資料層的SQL語句或預存程序
SQL雖然強大,但是從物件導向的角度來看,並不是一種高效和易於開發的手段。對新人來說,難以上手,線上問題的即時解決更是困難。
1.1.2 期望的情形
以面對對象的方式,剝離出統一的資料提供者,把層次間的耦合度降到最低。
所有笨代碼再也不用自己一行行Key出來
多種資料庫的支援
1.1.3 呼之欲出
經曆一系列“苦其心智,勞其筋骨”的過程,DataProvider(以下簡稱DP)與PPCoder結伴而來。
1.2 DP是什麼
.Net環境下,資料訪問層的解決方案,包含一個資料訪問組件DataProvider.Dll和一個代碼自動化工具PPCoder。應用於採用多層架構開發的軟體系統。
1.3 DP的特點
資料訪問層不用寫一行代碼,只需要設計資料庫
資料庫至少有一種約束:標識、主鍵、唯一
資料表之間可以配置主外鍵關係,從而實現關聯查詢模式
支援Sql Server和MS Access資料庫
使用預存程序與Sql Server 互動,預存程序由PPCoder產生
兩種資料庫可以無縫切換,在保證結構一致的前提下,只要重建一下實體類即可
資料操作方法調用簡單
支援針對資料訪問類的事務
支援直接下sql語句
強大的資料查詢功能
快取資料
多種查詢限定符:範圍、返回數量、Distinct、關聯查詢、不等於
返回當前頁:返回指定頁的資料
多類型返回:DataSet、Reader和DataBox
1.4 DP的好處
把系統開發簡化成資料庫設計和業務功能的開發,節省人力
降低系統耦合度,將資料訪問與業務分離,提高項目可維護性
資料庫結構頻繁改動時,項目不再受資料訪問層的拖累
支援多種資料庫,提高系統擴充性
2 使用說明
詳見產品手冊和DataProvider類庫說明
3 Q&A
3.1 功能面
有點暈,PPCoder和DataProvider是什麼關係?
DataProvider是個處理資料訪問的中介軟體
PPCoder是個配合它的協助工具輔助,協助自動產生具有特定結構的實體類(或預存程序)
DataProvider支援哪些資料庫嗎?
目前支援Sql Server和MS Access兩種。後續會考慮支援Oracle資料庫。
DP一個突出的特點就是結構相同的資料庫可以無縫切換。如果目前出於成本和規模的影響使用MS Access作為資料庫,那麼將來想轉化成Sql Server會非常容易。只需要使用PPCoder重建一下實體便可,原有代碼無須任何改動。
3.2 應用面
使用DP對資料庫設計有什麼特別需求嗎?
DP要求每張Table中至少有主鍵、標識或唯一鍵中的一個,以便唯一定位到一條資料。另外要特別注意的是產生實體的時候,每一個約束組合都會對應一個建構函式,所以不可以組合出來相同參數格式的約束組合。例如下面的設計是不合法的:定義RowID為主鍵,又定義一個ProductID為唯一鍵
因為我要操作的資料很大,所以總是報“資料庫逾時”錯誤,有辦法處理嗎?
逾時是因為預設的SqlCommand的CommandTimeOut為30,而語句執行過程所需要的時間大於此時間,解決此問題的辦法就是在Configration中初始CommandTimeOut為大一些的數字,如果不想設定逾時時間,可以將此值設定為0
我的資料表關係比較複雜,我如何擷取串表?
DP有三種辦法可以串出符合相應條件的關係。每種方法應用於不同的情況
如果只是兩張表之間的串聯關係,可以使用QueryJoin擷取相應的資料,應用此方法需要在產生實體類前在資料庫建立兩張表的關聯關係。
另外一種自己直接向資料庫中下Sql,然後通過ExecuteSql中的方法來檢索資料。
還有一方法就是在資料庫中拉出View,然後用PPCoder產生針對此View的實體,DP會把View當作一個普通的表來看待,針對View DP只提供查詢功能,查詢方法與普通表一樣。
3.3 產品面
DP是石頭裡蹦出來的嗎?
否,DP是餘波的作品,請多指教。
更多資訊見http://blog.ppcode.com/article.asp?id=538
DP不要錢吧?
完全免費
連絡方式MSN:ppcode@gmail.com
QQ:942365
DP有沒有考慮過開源
DP已經開源,源碼見下部連結
3.4 技術面
DP有什麼技術特點
DP應用了.Net反射技術來對實體進行操作。
自訂Attribute來記錄欄位資訊。
PPCoder的產生應用了.Net架構中的CodeDOM
Sql Server中使用預存程序互動,很大程度上提高了效能
具體技術細節見類庫說明
開源下載:
應用在.net2.0環境:
DataProvider_Net2.0
DataProvider_Net2.0_Source
coder2.0_net2.0_Source
應用在.net1.x環境:
DataProvider_Net1.x
DataProvider_Net1.x_Source
Coder2.0_Net1.x_Source
http://www.cnblogs.com/rexsp/archive/2007/12/04/983568.html