CYQ.Data.Orm.DBFast 新增类介绍(含类的源码及新版本配置工具源码)
前言:
以下功能在国庆期就完成并提前发布了,但到今天才有时间写文介绍,主要是国庆后还是选择就职了,悲催的是上班的地方全公司都能上网,唯独开发部竟不让上网,是个局域网。
也不是全不能上,房间里有三台能上网的机子(两台笔记本+一台台式机),下载资料还得用公司的U盘再转到自己电脑,这种半封闭的环境,相当的让人不适应,有种欲仰天吐血的感觉。
这一周我都向三个带总的领导反映了上网问题,不过没啥响应,估计是没戏。
于是我只有把其中一台能上网的笔记本拿到自己桌子上去独自占用了,勉强也能上下网了,不过基于安全问题,我也不好在那机子里登陆私人账号。
经过一周的研究,我发现解决方案还是有的:因为公司的规定只是开发的机子不让上网而已,自己按理应该可以带笔记本去上网,不过我奇怪的是竟然整个部门都没人带笔记本去,不知道搞啥名头。
好了,废话不多说了,下面入文章的正题:
CYQ.Data V5 配置工具:
最新更新了配置工具,新的界面截图如下:
本次调整的功能如下:
1:编码模式:新增加纯实体的生成: 至此,CYQ.Data 就有了三种编码模式,分别是:
A: 枚举型(MAction、MProc)- 性能最优的编码模式
B: 实体型(充血型的ORM操作 - 需要实体类继承CYQ.Data.Orm.OrmBase,也支持CodeFirst模式)
C: 纯实体(贫血型的ORM操作 - 通过本次新增的CYQ.Data.Orm.DBFast 静态类来操作) 2:生成的实体带说明文字。
3:默认名称空间增加{0}来代表数据库名称。
4:多数据库模式下,默认的数据库链接,约定对应的Web.Config的配置为"数据库名称Conn“。
下面示例生成一个实体类如下:
using System; namespace Web.Entity.Demo { public class Users { /// <summary> /// 标识ID /// </summary> public int? ID { get; set; } /// <summary> /// 用户名 /// </summary> public string UserName { get; set; } /// <summary> /// 创建日期 /// </summary> public DateTime? CreateTime { get; set; } } }
对于这样的实体,默认的数据库链接就是:
<add name="DemoConn" connectionString="server=.;database=demo;uid=sa;pwd=123456"/>
如果DemoConn不存在,则会取默认的Conn项。
工具的源码下载地址:http://www.cyqdata.com/download/article-detail-426
CYQ.Data.Orm.DBFast 类介绍
这是我最近新增加的静态类,主要是为了节省点代码,方便一些基础的操作。
示例代码(以上面的的Users实体为示例):
查询实体:
Users u=DBFast.Find<Users>(1);//一行查一个实体。
List<Users> uList=DBFast.Select<Users>(2,10,"id>10");//分页查询满足条件的列表。
增加数据:
DBFast.Insert<Users>(new Users{UserName="a";});
更新数据:
DBFast.Update<Users>(new Users{UserName="a";},1); 删除数据:
DBFast.Delete<Users>(1);
以上就是简的操作,增加这个静态类的意图,是为了简化一些常规的操作,让一行代码去解决,减少代码量。
所以这个静态类并不是万能的,其它复杂性的的操作方式, 建议使用枚举型的常规操作。
下面提供这个DBFast静态类的源码,细看源码,会发现这些DBFast类操作都仅是MAction类的二次封装形成的:
using System; using System.Collections.Generic; using System.Text; using CYQ.Data.Table; namespace CYQ.Data.Orm { /// <summary> /// 快速操作操作类。 /// </summary> public static class DBFast { /// <summary> /// 查找单条记录 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="where">条件</param> /// <param name="columns">指定查询的列(可选)</param> /// <returns></returns> public static T Find<T>(object where, params string[] columns) { T result = default(T); MDataRow row = null; using (MAction action = GetMAction<T>()) { if (columns != null && columns.Length > ) { action.SetSelectColumns(columns); } if (action.Fill(where)) { row = action.Data; } } if (row != null) { result = row.ToEntity<T>(); } return result; } public static List<T> Select<T>() { int count; return Select<T>(, , null, out count, null); } /// <summary> /// 列表查询 /// </summary> /// <param name="where">查询条件[可附带 order by 语句]</param> /// <returns></returns> public static List<T> Select<T>(string where, params string[] columns) { int count; return Select<T>(, , where, out count, columns); } /// <summary> /// 列表查询 /// </summary> /// <param name="topN">查询几条</param> /// <param name="where">查询条件[可附带 order by 语句]</param> /// <returns></returns> public static List<T> Select<T>(int topN, string where, params string[] columns) { int count; return Select<T>(, topN, where, out count, columns); } public static List<T> Select<T>(int pageIndex, int pageSize, params string[] columns) { int count; return Select<T>(pageIndex, pageSize, null, out count, columns); } public static List<T> Select<T>(int pageIndex, int pageSize, string where, params string[] columns) { int count; return Select<T>(pageIndex, pageSize, where, out count, columns); } /// <summary> /// 查找多条记录 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="pageIndex">第N页</param> /// <param name="pageSize">每页N条</param> /// <param name="where">条件</param> /// <param name="count">返回记录总数</param> /// <param name="columns">指定查询的列(可选)</param> /// <returns></returns> public static List<T> Select<T>(int pageIndex, int pageSize, object where, out int count, params string[] columns) { MDataTable dt = null; using (MAction action = GetMAction<T>()) { if (columns != null && columns.Length > ) { action.SetSelectColumns(columns); } dt = action.Select(pageIndex, pageSize, where, out count); } return dt.ToList<T>(); } /// <summary> /// 删除记录 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="where">条件</param> /// <returns></returns> public static bool Delete<T>(object where) { bool result = false; using (MAction action = GetMAction<T>()) { result = action.Delete(where); } return result; } public static bool Insert<T>(T t) { return Insert<T>(t, InsertOp.ID); } /// <summary> /// 添加一条记录 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="t">实体对象</param> /// <returns></returns> public static bool Insert<T>(T t, InsertOp op) { bool result = false; MDataRow row = null; using (MAction action = GetMAction<T>()) { action.Data.SetFromEntity(t); result = action.Insert(op); if (op != InsertOp.None) { row = action.Data; } } if (row != null) { row.SetToEntity(t); } return result; } public static bool Update<T>(T t) { return Update<T>(t, null); } /// <summary> /// 更新记录 /// </summary> /// <typeparam name="T">实体类型</typeparam> /// <param name="t">实体对象</param> /// <param name="where">条件</param> /// <returns></returns> public static bool Update<T>(T t, object where) { bool result = false; using (MAction action = GetMAction<T>()) { action.Data.SetFromEntity(t); result = action.Update(where); } return result; } private static MAction GetMAction<T>() { string conn = string.Empty; MAction action = new MAction(GetTableName<T>(out conn), conn); action.SetNoAop(); return action; } private static string GetTableName<T>(out string conn) { conn = string.Empty; Type t = typeof(T); string[] items = t.FullName.Split('.'); if (items.Length > ) { conn = items[items.Length - ] + "Conn"; items = null; } string tName = t.Name; t = null; return tName; } } }
结束语:
新进的公司,一开始以为是开发电子商务类的网站,所以我经三考虑的架构选型不是WebForm也不是MVC,而是打算采用QBlog那一套的框架,还特意思改进了CYQ.Data里的XHtmlAction模板引擎,增加了CMS的标签功能,以为要上战场,结果进去一天就发现,是开发的分销商订单系统,数据是和ERP对接,于是架构目前选型就变更为EasyUI+CYQ.Data+WebForm了。
下周应该会招一两个战友,人在广州的有兴趣的可以给我发私信。
CYQ.Data.Orm.DBFast 新增类介绍(含类的源码及新版本配置工具源码)的更多相关文章
- CYQ.Data V5 MDataTable 专属篇介绍
前言 以前一两个月才出一篇,这三天有点变态地连续1天1篇(其实都是上周末两天写好的存货). 短期应该没有新的和此框架相关的文章要写了,这应该是最后一篇,大伙且看且珍惜. 前两篇讲数据库读写分离和分布式 ...
- CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维
前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...
- CyQ.data MDataTable
前言 以前一两个月才出一篇,这三天有点变态地连续1天1篇(其实都是上周末两天写好的存货). 短期应该没有新的和此框架相关的文章要写了,这应该是最后一篇,大伙且看且珍惜. 前两篇讲数据库读写分享和分布式 ...
- CYQ.Data 支持WPF相关的数据控件绑定(2013-08-09)
事件的结果 经过多天的思考及忙碌的开发及测试,CYQ.Data 终于在UI上全面支持WPF,至此,CYQ.Data 已经可以方便支持wpf的开发,同时,框架仍保留最低.net framework2.0 ...
- CYQ.Data 支持WPF相关的数据控件绑定.Net获取iis版本
CYQ.Data 支持WPF相关的数据控件绑定(2013-08-09) 事件的结果 经过多天的思考及忙碌的开发及测试,CYQ.Data 终于在UI上全面支持WPF,至此,CYQ.Data 已经可以方便 ...
- CYQ MAction,子表 新增,删除,修改 集合
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- CYQ.Data V5 从入门到放弃ORM系列:教程 - Log、SysLogs两个日志类使用
Log 静态类介绍: Public Static (Shared) Methods GetExceptionMessage 获取异常的内部信息 WriteLogToDB Overloaded. 将日志 ...
- CYQ.Data V5 从入门到放弃ORM系列:教程 - AppConfig、AppDebug类的使用
1:AppConfig类的介绍: Public Static (Shared) Properties IsEnumToInt 是否使用表字段枚举转Int方式(默认为false). 设置为true时,可 ...
- CYQ.Data V5 从入门到放弃ORM系列:教程 - MProc类使用
MProc介绍 MProc:是一个用于执行SQL或存储过程的数据库操作类,它轻量高性能地类似于Dapper. MProc:它出现的场景很少,因为MAction自身就能处理掉90%-100%的数据操作( ...
随机推荐
- 何为HDFS?
该文来自百度百科,自我收藏. Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.它和现有的分布式文件系统有很多共同点.但同时, ...
- 【协议分析】Wireshark 过滤表达式实例
Wireshark 过滤表达式实例 1.wireshark基本的语法 字符 \d 0-9的数字 \D \d的补集(以所以字符为全集,下同),即所有非数字的字符 ...
- Android开发之Java集合类性能分析
对于Android开发者来说深入了解Java的集合类很有必要主要是从Collection和Map接口衍生出来的,目前主要提供了List.Set和 Map这三大类的集合,今天Android吧(ard8. ...
- 【My Life】写在年末, 我的2013
[My Life]写在年末, 我的2013 SkySeraph Dec. 30 2013 Email:skyseraph00@163.com 好久没写博客了, 遗忘的历史,遗忘了自我... 岁月拾回 ...
- Service and controller in angularJs
Separation of concern is at the heart while designing an AngularJS application. Your controller must ...
- 如何使用android百度地图离线地图
1.首先把离线地图放在android工程下的assets里面. 注意:建议离线地图下载通过百度地图APIDEMO去下载,因为到官网上下载的离线地图文件格式不一样,APIDEMO的格式是.dat,而官网 ...
- Linux 操作mysql数据库 创建库 导入、删除表
确保线上的运行数据库是不可避免的本人小白,因公司上线没有办法自己去整服务器,深刻体会到服务器大神的霸气,所以为了增加记忆,服务广大员友记录一下 linux mysql 忘记root的密码无法登陆进my ...
- XVI Open Cup named after E.V. Pankratiev. GP of Peterhof
A. (a, b)-Tower 当指数大于模数的时候用欧拉定理递归计算,否则直接暴力计算. #include<cstdio> #include<algorithm> #incl ...
- Leetcode Delete Node in a Linked List
Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...
- 栈的JS实现
栈,是一种特殊的线性表,其插入及删除的操作都在线性表的同一端进行.这一端称为栈顶,另一端称为栈底.就类似于餐厅里的一摞盘子,后放的盘子在上方,也会先被人拿走.栈具有"后进先出"的逻 ...