CYQ.Data V5 MDataTable 專屬篇介紹


前言

以前一兩個月才出一篇,這三天有點變態地連續1天1篇(其實都是上周末兩天寫好的存貨)。

短期應該沒有新的和此框架相關的文章要寫了,這應該是最后一篇,大伙且看且珍惜。

前兩篇講數據庫讀寫分離和分布式緩存,這篇隆重地介紹一下:MDataTable,畢竟它有很多未公布或隱藏技能,值得一看。

CYQ.Data 核心使用類介紹

常用:

1:操作數據庫:MAction、MProc (名稱空間:CYQ.Data)

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)

掌握上面幾個類,基本就掌握了框架的核心了。

不常用:

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

1:MDataTable與數據庫的關系

先看一張圖:

和支持的所有數據庫打通,這就是MDataTable的強大之處,任何一種數據庫的數據只要流向MDataTable,都可以自由轉到任意一種數據庫輸出。

而實現這一切的方法就是:AcceptChanges (AcceptOp op, string newConn, params object[] jointPrimaryKeys)

深受廣大網友喜愛的DBImport導數據庫工具,就是靠它完成的。

2:MDataTable與數據類型的關系

先看一張圖:

MDataTable和主流數據類型也打通了,即任意一種數據,經過MDataTable,就可以以任意一種數據格式輸出。

而實現這一切的方法就是:MDataTable.CreateFrom (object data) 和 ToJson()、ToXml()、ToList<T>()。

CreateFrom除了支持這幾種,其它字典型的如:Dictionary、HashTable等實現IEnumerable接口的都可以往里塞。

如果只有一行數據,就對應MDataRow的LoadFrom方法。

3:MDataTable的隱式轉換類型

先看一張圖:

對這種幾種類型,只需要MDataTable dt=xxx;

 

4:MDataTable的屬性和方法

先看一張圖:

靜態方法只有一個,就是上面提到的:CreateFrom。

圖里漏了一個方法:獲取某列的集合:List<T> GetColumnItems<T>

5:幾個新方法的代碼演示

1:行列轉換Pivot(string rowName, string colName, string valueName)

原來數據是這樣的:

調用之后數據是這樣的:

2:多表關聯:Join(MDataTable dt, params string[] appendColumns)

先看這一段截自分布式緩存memcache里的代碼:

status有N個Dictionary,每個字段轉成MDataTable后是這樣的:

每個表的Key是一樣的,所以通過指定表的Join類為Key,然后把Value改一下名稱即可。

表Join后的結果是這樣的:

3:動態屬性:DynamicData

既然為動態屬性,說明它很動:

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 在此框架中,像一個關鍵的路由結點,相當重要,輕輕了解,用好它,你的開發旅程會變的很輕松。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM