前言

以前一两个月才出一篇,这三天有点变态地连续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 在此框架中,像一个关键的路由结点,相当重要,轻轻了解,用好它,你的开发旅程会变的很轻松。

CYQ.Data V5 MDataTable 专属篇介绍的更多相关文章

  1. CYQ.Data V5 分布式自动化缓存设计介绍(二)

    前言: 最近一段时间,开始了<IT连>创业,所以精力和写的文章多数是在分享创业的过程. 而关于本人三大框架CYQ.Data.Aries.Taurus.MVC的相关文章,基本都很少写了. 但 ...

  2. CYQ.Data.Orm.DBFast 新增类介绍(含类的源码及新版本配置工具源码)

    前言: 以下功能在国庆期就完成并提前发布了,但到今天才有时间写文介绍,主要是国庆后还是选择就职了,悲催的是上班的地方全公司都能上网,唯独开发部竟不让上网,是个局域网. 也不是全不能上,房间里有三台能上 ...

  3. CYQ.Data V5 从入门到放弃ORM系列:框架的优势

    前言: 框架开源后,学习使用的人越来越多了,所以我也更加积极的用代码回应了. 在框架完成了:数据库读写分离功能 和 分布式缓存功能 后: 经过三天三夜的不眠不休,终于完成框架第三个重量级的功能:自动化 ...

  4. CYQ.Data V5 分布式缓存Redis应用开发及实现算法原理介绍

    前言: 自从CYQ.Data框架出了数据库读写分离.分布式缓存MemCache.自动缓存等大功能之后,就进入了频繁的细节打磨优化阶段. 从以下的更新列表就可以看出来了,3个月更新了100条次功能: 3 ...

  5. CYQ.Data V5 数据库读写分离功能介绍

    前言 好多年没写关于此框架的新功能的介绍了,这些年一直在默默地更新,从Nuget上的记录就可以看出来: 这几天在看Java的一些东西,除了觉的Java和.NET的相似度实在太高之外,就是Java太原始 ...

  6. 终于等到你:CYQ.Data V5系列 (ORM数据层)最新版本开源了

    前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...

  7. 终于等到你:CYQ.Data V5系列 (ORM数据层,支持.NET Core)最新版本开源了

    前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...

  8. CYQ.Data V5 从入门到放弃ORM系列:教程 - MProc类使用

    MProc介绍 MProc:是一个用于执行SQL或存储过程的数据库操作类,它轻量高性能地类似于Dapper. MProc:它出现的场景很少,因为MAction自身就能处理掉90%-100%的数据操作( ...

  9. CYQ.Data V5 从入门到放弃ORM系列:教程 - AppConfig、AppDebug类的使用

    1:AppConfig类的介绍: Public Static (Shared) Properties IsEnumToInt 是否使用表字段枚举转Int方式(默认为false). 设置为true时,可 ...

随机推荐

  1. Web Applicationservlet,cookie,session

    Web Application简介: Web Application NameWEB-INFweb.xml 该web application的配置文件lib 该web application用到的依赖 ...

  2. JavaScript isNaN() 函数

    定义与用法: isNaN() 函数用于检查其参数是否是非数字值. 语法: isNaN(x) 描述:     x是要检测的值. 返回值: 如果 x 是特殊的非数字值 NaN(或者能被转换为这样的值),返 ...

  3. Java环境变量的简记

    1,安装版的jre或jdk.安装后如果不做开发用,则只是做Java运行时环境,则不需要手动配置任何Java环境变量. 2,绿色解压版(拷贝版)jdk或jre.运行和开发都需要配置环境变量. 运行Jav ...

  4. some useful linux commands

    # best way to see log file less +F /var/log/syslog (equals: less /var/log/syslog, then shift+f) # se ...

  5. WPF中获取鼠标相对于桌面位置

    var transform = PresentationSource.FromVisual(this).CompositionTarget.TransformFromDevice; var mouse ...

  6. Eclipse 执行成功的 Hadoop-1.2.1 WordCount 源码

    万事开头难.最近在学习Hadoop,先是搭建各种版本环境,从2.2.0到2.3.0,再到1.2.1,终于都搭起来了,折腾了1周时间,之后开始尝试使用Eclipse编写小demo.仅复制一个现成的Wor ...

  7. div高度根据内容自动增大

    1.很多时候我们希望容器高度能够自适应内部元素的变化,需要用到min-height属性. 2.有时候用了min-height还是不会随着内容自适应高度,您需要检查下容器的子元素是不是有浮动属性,当子元 ...

  8. 【第三课】WEBIX 入门自学-Hello World

    在看官网教程时,入门的例子就是dataTable这个空间.So,遵循官网,一起来看一下入门的DataTable组件: WEB使用时固然是先引入相应的库文件: 代码如下 <html> < ...

  9. Windows安装mysql-5.7.17-winx64.zip方式

    1.去官网上下载.zip格式的文件. 2.解压到一个文件夹,这里我用D:\MySql表示 3.在D:\MySql\mysql-5.7.17-winx64下新建my.ini配置文件 黄色背景色的地方需要 ...

  10. 快速理解-Ajax

    AJAX即“Asynchronous JavaScript and XML”,意思是异步JavaScript和XML,是指一种创建交互式网页的网页开发技术. 虽然现在很少有人去自己手动写AJAX,大多 ...