CYQ.Data V5 MAction新增加SetExpression方法说明

需求:

 

 

在之前的CYQ.Data版本中,如果你要更新某一个字段的值+1;

 

解决方案:

 

 

1:如果用MAction操作,可能会如下代码:

 

using(MAction action=new MAction(表名))

{

if(action.Fill(id))

{

    action.Set(字段名,action.Get<int>(字段名)+1);

    action.Update();

}

}

 

简单的说,就是需要查询出值,然后再用原值进行相关的操作,用这种代码代价就是要多查一次。

 

 

2:另一种方式高性能的是使用MProc来直接操作Sql语句,可能会如下代码:

 

using(MProc proc=new Proc("Update 表名 set 字段名=字段名+1"))

{

proc.ExeNonQuery();

}

 

用MProc基本是万能的了,直接处理SQL语句和存储过程。。。

 

 

大伙习惯了MAction多,所以希望MAction也有个顺路功能:

 

不过好多人习惯用MAction,都图个方便,连条SQL语句也想省一下。。。

事实上,我本人在多个项目中,也有这种需求,当然最后都是直接使用MProc处理了。

 

很多时候,我一直在寻找一种最优方式,能处理这种值+1,值-1的问题,不过每每看着架构,不好下手,一直没找到切入点和使用方法。

 

 

比如一开始想的:

 

using(MAction action=new MAction(表名))

{

action.Set(字段名,“[字段名]+1”);

action.Update("id=1");

}

 

但是这种方式,实现起来,没想象的简单,而且这值是字符串还是表达式?分不清也说不明,所以一直卡在以何种使用方式上。

 

 

CYQ.Data 框架设计原则:

 

CYQ.Data 框架的设计,很多时候,是先思考使用的方法,再去想怎么实现的,先想象出最简单的使用方式,再去想能不能实现,而不是实现了一个功能,却很难使用。

为此,但网友又对我提出这种需求的要求时,我又花了N个小时,看着代码发呆,每次我思考问题或有某项功能时,我都会看着代码发呆几个小时。。当然是在不停的思考。。

 

 

后来终于设计出最终解决方案:

 

using(MAction action=new MAction(表名))

{

action.Set(字段名,值);

action.SetExpression(“字段名=字段名+1”);

action.SetExpression(“字段名=len(字段名)+1”);

action.Update();

}

 

 

通过增加一个表达式方法,基本上有点万能了,事实在后端,组成的Update语句大体为:

 

update 表名 set 表达式,字段名=@字段名 where ...

 

 

简单说,就是表达式只是简单的被附加到原来的set的后面,最终被组装成SQL执行,当然了,如果你想高级点用参数化也是可以的。

 

            using (MAction action = new MAction("Blog_Class"))

            {

                action.SetExpression("count=count+@Value");//表达式升级带参数化。

                action.SetPara("Value", 2, DbType.Int32);//设置参数化值

                action.Update();

            }

 

 

到此,基本上有表达存在,可以处理N种不同的需求了,方便性提升了不少。

 

补充: 

不小心把文章“只允许注册用户访问”给打上勾了,结果发现注册用户的阅读数仅88,根据统计,还有近27个是为了看文章被逼登陆了一下。

周末的行情访问量这么低?大伙都跑哪去偷情了?

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2013/05/05/3060543.html

时间: 2024-10-25 18:39:41

CYQ.Data V5 MAction新增加SetExpression方法说明的相关文章

CYQ.Data V5文本数据库技术原理解密

前言: 这两天有点感冒状态,除了以前折腾 微博粉丝精灵 腾到三更,最近也在折腾个别工具到四更,偶尔心来心潮,赶紧写写文章,最近有很多朋友对CYQ.Data V5里的文本数据库感兴趣,这里就给大伙说下文本数据库技术原理,给大伙解下密.     CYQ.Data 框架的稳定与前进: CYQ.Data 对于V4系列,版本号就在V4.55版本就不再提高了,主要是为了保留一个最稳定的版本,基本除了Bug修正,不会再有大于V4.N的版本号出现了. 而V5版本,这一两年来,事实上,代码改动相当大,内部类的结构

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

CYQ.Data V5 分布式自动化缓存设计介绍(二) 前言: 最近一段时间,开始了<IT连>创业,所以精力和写的文章多数是在分享创业的过程. 而关于本人三大框架CYQ.Data.Aries.Taurus.MVC的相关文章,基本都很少写了. 但框架的维护升级,还是时不时的在进行中的,这点从开源的Github上的代码提交时间上就可以看出来了. 毕竟<IT连>的后台WebAPI,用的是Taurus.MVC,后台系统管理用的是Aries. 不过今天,就不写创业相关的文章了,先分享篇技术类

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

前言: 框架开源后,学习使用的人越来越多了,所以我也更加积极的用代码回应了. 在框架完成了:数据库读写分离功能 和 分布式缓存功能 后: 经过三天三夜的不眠不休,终于完成框架第三个重量级的功能:自动化分布式缓存. 源代码已经提交,源码地址见:终于等到你:CYQ.Data V5系列 (ORM数据层)最新版本开源了 记得很多年前,大概2010年左右吧,CYQ.Data框架进入快速更新版本阶段的时候, 那时候的我会经常在一些技术群里有意无意的说起自己的框架,然后群里总有那么一些自我而自负的人会说: 你

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

背景: 随着V5框架使用者的快速增加,终于促使我开始对整个框架编写完整的Demo. 上周大概花了一星期的时间,每天写到夜里3点半,终完成了框架所有功能的Demo. 同时,按V5框架名称空间的顺序,对每个类的使用,补充相应的文章介绍,以漏补缺. 以下开始介绍: MAction Demo的项目文件: 1:项目解决方案: 2:两个文件在Debug目录里: 演示的是SQLite数据库(默认System.Data.SQLite.DLL是64位版本,如果运行提示加载出错,自己解压32位的复盖即可) demo

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

前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说过  这么多年 秋天有两点没变 一是还是单身 另外一个就是cyq.data还没开源  终于等到开源了! 也许吧,只有把cyq.data最终开源了,才能解决单身问题,不然我在这上面花的时间太多,都没时间和妹子聊天了.   几个重要网址: 源码SVN地址:https://github.com/cyq11

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

前言 好多年没写关于此框架的新功能的介绍了,这些年一直在默默地更新,从Nuget上的记录就可以看出来: 这几天在看Java的一些东西,除了觉的Java和.NET的相似度实在太高之外,就是Java太原始,急需被拯救. 之后又回到.NET的思维来,想着怎么在框架里实现读写分离控制请求切换. 之前几个月一直都有在思考,想及对框架现有的代码改动可能较大,所以迟迟没怎么下手. 最近终于在厕所蹲下的一瞬间,灵光一闪,感觉思绪来了,然后一鼓作气,就把它给作了. 数据库读写分离的三步曲 1:实现主(读)从(写)

CYQ.Data V5 批量插入与批量更新示例

最近有网友问了我 CYQ.Data 要怎么实现批量修改,于是我就花了点时间给写了以下的示例:     示例为Winform应用,现实对DataGridView控件单元格的内容后,可以实现自动更新到数据库.     先上最终结果图:       接下上一张项目解决方案图:       由于是写Demo,所以我一般都选择用文本数据库做为示例.     我新建了一个Users.ts,内容为:   ID,int; UserName,string; CreateTime,datetime;     意思就

CYQ.Data V5 MDataTable 专属篇介绍

前言 以前一两个月才出一篇,这三天有点变态地连续1天1篇(其实都是上周末两天写好的存货). 短期应该没有新的和此框架相关的文章要写了,这应该是最后一篇,大伙且看且珍惜. 前两篇讲数据库读写分离和分布式缓存,这篇隆重地介绍一下:MDataTable,毕竟它有很多未公布或隐藏技能,值得一看. CYQ.Data 核心使用类介绍 常用: 1:操作数据库:MAction.MProc (名称空间:CYQ.Data) 2:日志操作:Log.SysLogs(名称空间:CYQ.Data) 3:配置和性能调试:Ap

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

1:AppConfig类的介绍: Public Static (Shared) Properties IsEnumToInt 是否使用表字段枚举转Int方式(默认为false). 设置为true时,可以加快一点性能,但生成的表字段枚举必须和数据库一致. Aop Aop 插件配置项 示例配置:[ 完整类名,程序集(dll)名称]<add key="Aop" value="Web.Aop.AopAction,Aop"/> ThreadBreakPath To