天天看点

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