zoukankan      html  css  js  c++  java
  • CyQ.data 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 在此框架中,像一个关键的路由结点,相当重要,轻轻了解,用好它,你的开发旅程会变的很轻松。

  • 相关阅读:
    Sqlserver 实际开发中表变量的用法
    Python Day 20 面向对象 (面向对象的组合用法,面向对象的三大特性
    Python Day 19 面向对象(初识面向对象)
    Python Day 18 常用模块(模块和包)
    Python Day 17 常用模块(常用模块一 时间模块,random模块,os模块,sys模块,序列化模块)
    Python Day 15 函数(递归函数、二分查找算法)
    Python Day 14 函数(内置函数,匿名函数(lambda表达式))
    Python Day 13 函数(迭代器,生成器,列表推导式,生成器表达式)
    Python Day 11 + Python Day 12 函数(函数名的应用,闭包,装饰器)
    Python Day 10 函数(名称空间,作用域,作用域链,加载顺序等; 函数的嵌套 global,nonlocal)
  • 原文地址:https://www.cnblogs.com/zouhp/p/7132883.html
Copyright © 2011-2022 走看看