前言

以前一两个月才出一篇,这三天有点变态地连续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里关于提交用户权限的代码:

  1. using (MAction action = new MAction(TableNames.Sys_RoleAction))
  2. {
  3. action.BeginTransation();
  4. action.Delete("RoleID='" + roleID + "'");
  5. dt.DynamicData = action;//传递数据链接
  6. dt.SetState(1);
  7. result = dt.AcceptChanges(AcceptOp.Insert);
  8. if (!result)
  9. {
  10. action.RollBack();
  11. }
  12. action.EndTransation();
  13. } 

可以把MAction或MProc对象传递给它,再执行事务,如此,就共用了一个链接了,启到同一个事务的作用。

总结

MDataTable 在此框架中,像一个关键的路由结点,相当重要,轻轻了解,用好它,你的开发旅程会变的很轻松。

CyQ.data MDataTable的更多相关文章

  1. CYQ.Data V5 MDataTable 专属篇介绍

    前言 以前一两个月才出一篇,这三天有点变态地连续1天1篇(其实都是上周末两天写好的存货). 短期应该没有新的和此框架相关的文章要写了,这应该是最后一篇,大伙且看且珍惜. 前两篇讲数据库读写分离和分布式 ...

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

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

  3. CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维

    前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...

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

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

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

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

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

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

  7. CYQ.Data 支持WPF相关的数据控件绑定(2013-08-09)

    事件的结果 经过多天的思考及忙碌的开发及测试,CYQ.Data 终于在UI上全面支持WPF,至此,CYQ.Data 已经可以方便支持wpf的开发,同时,框架仍保留最低.net framework2.0 ...

  8. CYQ.Data V4系列全面开源(2013-08-04)

    致各位.NET开发者: 考虑到本人开源作品太多,个人维护力度有限,故自2013-08-04开始,开放原本需要授权使用的V4系列的最高版本V4.55的框架源码,同时也开放相对应的辅助工具源码,自此,V4 ...

  9. CYQ.Data 批量添加数据性能测试(每秒千、万)

    今天有网友火晋地同学进了CYQ.Data官方群了,他正在折腾了一个各大ORM性能测试的比较的软件,如下图 折腾的种类也不少: 感觉这软件折腾的不错~~~值的期待~~~ 另外,他指出CYQ.Data 在 ...

随机推荐

  1. Spring MVC中Session的正确用法之我见

    Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...

  2. web2 - JavaScript

    JavaScript 知识要点 参考教材一 参考教材二 参考教材三 1.JavaScript 和 Java 的关系? 2.JavaScript 在编程中可以做什么? 3.如何在 html 中使用 Ja ...

  3. 关于微信分享到朋友圈(Thinkphp框架下实现)

    PHP部分 扩展类代码部分: <?php namespace Think; class JsSdk {       private $appId;       private $appSecre ...

  4. PHP安全、Sql防注入安全汇总

    利用Mysqli和PDO 产生原因 主要就是一些数据没有经过严格的验证,然后直接拼接 SQL 去查询.导致漏洞产生,比如: $id = $_GET['id']; $sql = "SELECT ...

  5. HDU - 1067 Gap (bfs + hash) [kuangbin带你飞]专题二

    题意:    起初定28张卡牌的排列,把其中11,  21, 31, 41移动到第一列,然后就出现四个空白,每个空白可以用它的前面一个数的下一个数填充,例如43后面的空格可以用44填充,但是47后面即 ...

  6. npm http-server Dockerfile alpine 微容器,袖珍体积,解决时区问题

    前端写得少,但是前端技术的思想也是非常有学习的价值,用VUE写了几个手机form页面,体验了一番spa,用docker部署也是非常简单 直接docker pull node  676M体积.不能忍. ...

  7. (转载)SVM-基础(二)

    支持向量机: Support Vector  by pluskid, on 2010-09-10, in Machine Learning     52 comments 本文是"支持向量机 ...

  8. file_get_contents函数不能使用的解决方法

    今天开发微信公众平台的时候 使用file_get_contents 去获得token 结果一直返回false.百度了一下,大部分都是说用curl 偶然发现可能是openssl没有开启的问题,开启ope ...

  9. FFMPEG:压缩之H264编码(YUV420P->H264)

    720*576@25hz,550帧的yuv420p数据,编码时间13.3秒. void CTest0Dlg::OnButton5() { // TODO: Add your control notif ...

  10. 从Git到GitHub,详细教程

    众所周知,一个稍微有点规模的项目,都不可能是一个人单打独斗完成的(能完成的大神别打我),所以,一个高效的项目团队就需要一个NB的工具来进行有效的交流(曾经有人问我企鹅不就可以吗,我竟无言以对),今天就 ...