天天看點

CYQ.Data V5 MDataTable 專屬篇介紹前言CYQ.Data 核心使用類介紹1:MDataTable與資料庫的關系2:MDataTable與資料類型的關系3:MDataTable的隐式轉換類型4:MDataTable的屬性和方法5:幾個新方法的代碼示範總結

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

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

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

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

先看一張圖:

CYQ.Data V5 MDataTable 專屬篇介紹前言CYQ.Data 核心使用類介紹1:MDataTable與資料庫的關系2:MDataTable與資料類型的關系3:MDataTable的隐式轉換類型4:MDataTable的屬性和方法5:幾個新方法的代碼示範總結

和支援的所有資料庫打通,這就是mdatatable的強大之處,任何一種資料庫的資料隻要流向mdatatable,都可以自由轉到任意一種資料庫輸出。

而實作這一切的方法就是:acceptchanges (acceptop op, string newconn, params object[] jointprimarykeys)

深受廣大網友喜愛的dbimport導資料庫工具,就是靠它完成的。

CYQ.Data V5 MDataTable 專屬篇介紹前言CYQ.Data 核心使用類介紹1:MDataTable與資料庫的關系2:MDataTable與資料類型的關系3:MDataTable的隐式轉換類型4:MDataTable的屬性和方法5:幾個新方法的代碼示範總結

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

而實作這一切的方法就是:mdatatable.createfrom (object data) 和 tojson()、toxml()、tolist<t>()。

createfrom除了支援這幾種,其它字典型的如:dictionary、hashtable等實作ienumerable接口的都可以往裡塞。

如果隻有一行資料,就對應mdatarow的loadfrom方法。

CYQ.Data V5 MDataTable 專屬篇介紹前言CYQ.Data 核心使用類介紹1:MDataTable與資料庫的關系2:MDataTable與資料類型的關系3:MDataTable的隐式轉換類型4:MDataTable的屬性和方法5:幾個新方法的代碼示範總結

對這種幾種類型,隻需要mdatatable dt=xxx;

CYQ.Data V5 MDataTable 專屬篇介紹前言CYQ.Data 核心使用類介紹1:MDataTable與資料庫的關系2:MDataTable與資料類型的關系3:MDataTable的隐式轉換類型4:MDataTable的屬性和方法5:幾個新方法的代碼示範總結

靜态方法隻有一個,就是上面提到的:createfrom。

圖裡漏了一個方法:擷取某列的集合:list<t> getcolumnitems<t>

原來資料是這樣的:

CYQ.Data V5 MDataTable 專屬篇介紹前言CYQ.Data 核心使用類介紹1:MDataTable與資料庫的關系2:MDataTable與資料類型的關系3:MDataTable的隐式轉換類型4:MDataTable的屬性和方法5:幾個新方法的代碼示範總結

調用之後資料是這樣的:

CYQ.Data V5 MDataTable 專屬篇介紹前言CYQ.Data 核心使用類介紹1:MDataTable與資料庫的關系2:MDataTable與資料類型的關系3:MDataTable的隐式轉換類型4:MDataTable的屬性和方法5:幾個新方法的代碼示範總結

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

CYQ.Data V5 MDataTable 專屬篇介紹前言CYQ.Data 核心使用類介紹1:MDataTable與資料庫的關系2:MDataTable與資料類型的關系3:MDataTable的隐式轉換類型4:MDataTable的屬性和方法5:幾個新方法的代碼示範總結

status有n個dictionary,每個字段轉成mdatatable後是這樣的:

CYQ.Data V5 MDataTable 專屬篇介紹前言CYQ.Data 核心使用類介紹1:MDataTable與資料庫的關系2:MDataTable與資料類型的關系3:MDataTable的隐式轉換類型4:MDataTable的屬性和方法5:幾個新方法的代碼示範總結

每個表的key是一樣的,是以通過指定表的join類為key,然後把value改一下名稱即可。

表join後的結果是這樣的:

CYQ.Data V5 MDataTable 專屬篇介紹前言CYQ.Data 核心使用類介紹1:MDataTable與資料庫的關系2:MDataTable與資料類型的關系3:MDataTable的隐式轉換類型4:MDataTable的屬性和方法5:幾個新方法的代碼示範總結

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

a:平時就是一個屬性,你可以把它當臨時存檔對象。

b:适用于批量事務時:如果acceptchanges失敗,dynamicdata會存檔exception異常。

c:通常一個指acceptchanges是一個事務,如果外部也有事務,希望在同一個事務時:

看一下asp.net aries裡關于送出使用者權限的代碼:

1

2

3

4

5

6

7

8

9

10

11

12

13

<code>using</code> <code>(maction action = </code><code>new</code> <code>maction(tablenames.sys_roleaction))</code>

<code>{</code>

<code>    </code><code>action.begintransation();</code>

<code>    </code><code>action.delete(</code><code>"roleid='"</code> <code>+ roleid + </code><code>"'"</code><code>);</code>

<code>    </code><code>dt.dynamicdata = action;</code><code>//傳遞資料連結</code>

<code>    </code><code>dt.setstate(1);</code>

<code>    </code><code>result = dt.acceptchanges(acceptop.insert);</code>

<code>    </code><code>if</code> <code>(!result)</code>

<code>    </code><code>{</code>

<code>        </code><code>action.rollback();</code>

<code>    </code><code>}</code>

<code>    </code><code>action.endtransation();</code>

<code>} </code>

可以把maction或mproc對象傳遞給它,再執行事務,如此,就共用了一個連結了,啟到同一個事務的作用。

mdatatable 在此架構中,像一個關鍵的路由結點,相當重要,輕輕了解,用好它,你的開發旅程會變的很輕松。

本文原創發表于部落格園,作者為路過秋天,原文連結:http://www.cnblogs.com/cyq1162/p/5618048.html