之前一兩個月纔出一篇,這三天有點變態地連續1天1篇(其實都是上週末兩天寫好的存貨)。數據庫
短時間應該沒有新的和此框架相關的文章要寫了,這應該是最後一篇,大夥且看且珍惜。編程
前兩篇講數據庫讀寫分離和分佈式緩存,這篇隆重地介紹一下:MDataTable,畢竟它有不少未公佈或隱藏技能,值得一看。緩存
1:操做數據庫:MAction、MProc (名稱空間:CYQ.Data)app
2:日誌操做:Log、SysLogs(名稱空間:CYQ.Data)框架
3:配置和性能調試:AppConfig、AppDebug(名稱空間:CYQ.Data)分佈式
4:內存表體系:MDataTable(MDataRow、MDataCell) (名稱空間:CYQ.Data.Table)工具
5:Json系:JsonHelper (名稱空間:CYQ.Data.Tool)性能
6:本地緩存和分佈式緩存:CacheManage (名稱空間:CYQ.Data.Cache)3d
掌握上面幾個類,基本就掌握了框架的核心了。調試
1:實體型操做數據庫:OrmBase、SimpleOrmBase、DBFast (名稱空間:CYQ.Data.Orm)
2:Html/XHtml模板引擎:XHtmlAction、RSS (名稱空間:CYQ.Data.Xml)
3:AOP編程:IAop接口 (名稱空間:CYQ.Data.Aop)
4:數據庫結構工具:DBTool (名稱空間:CYQ.Data.Tool)
5:語法糖及UI擴展:IField接口、IUIValue接口、RegisterUI (名稱空間:CYQ.Data.Extension)
以上就是整個框架的全部,所有加起來目前編繹才300K左右,僅有一個dll,無任何其它直接依賴,但能作的事超出你想象。
下面開始介紹MDataTable
先看一張圖:
和支持的全部數據庫打通,這就是MDataTable的強大之處,任何一種數據庫的數據只要流向MDataTable,均可以自由轉到任意一種數據庫輸出。
而實現這一切的方法就是:AcceptChanges (AcceptOp op, string newConn, params object[] jointPrimaryKeys)
深受廣大網友喜好的DBImport導數據庫工具,就是靠它完成的。
先看一張圖:
MDataTable和主流數據類型也打通了,即任意一種數據,通過MDataTable,就能夠以任意一種數據格式輸出。
而實現這一切的方法就是:MDataTable.CreateFrom (object data) 和 ToJson()、ToXml()、ToList<T>()。
CreateFrom除了支持這幾種,其它字典型的如:Dictionary、HashTable等實現IEnumerable接口的均可以往裏塞。
若是隻有一行數據,就對應MDataRow的LoadFrom方法。
先看一張圖:
對這種幾種類型,只須要MDataTable dt=xxx;
先看一張圖:
靜態方法只有一個,就是上面提到的:CreateFrom。
圖裏漏了一個方法:獲取某列的集合:List<T> GetColumnItems<T>
原來數據是這樣的:
調用以後數據是這樣的:
先看這一段截自分佈式緩存memcache裏的代碼:
status有N個Dictionary,每一個字段轉成MDataTable後是這樣的:
每一個表的Key是同樣的,因此經過指定表的Join類爲Key,而後把Value改一下名稱便可。
表Join後的結果是這樣的:
既然爲動態屬性,說明它很動:
A:平時就是一個屬性,你能夠把它當臨時存檔對象。
B:適用於批量事務時:若是AcceptChanges失敗,DynamicData會存檔Exception異常。
C:一般一個指AcceptChanges是一個事務,若是外部也有事務,但願在同一個事務時:
看一下ASP.NET Aries裏關於提交用戶權限的代碼:
using (MAction action = new MAction(TableNames.Sys_RoleAction)) { action.BeginTransation(); action.Delete("RoleID='" + roleID + "'"); dt.DynamicData = action;//傳遞數據連接 dt.SetState(1); result = dt.AcceptChanges(AcceptOp.Insert); if (!result) { action.RollBack(); } action.EndTransation(); }
能夠把MAction或MProc對象傳遞給它,再執行事務,如此,就共用了一個連接了,啓到同一個事務的做用。
MDataTable 在此框架中,像一個關鍵的路由結點,至關重要,輕輕瞭解,用好它,你的開發旅程會變的很輕鬆。