前言:

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

也不是全不能上,房间里有三台能上网的机子(两台笔记本+一台台式机),下载资料还得用公司的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 新增类介绍(含类的源码及新版本配置工具源码)的更多相关文章

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

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

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

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

  3. CyQ.data MDataTable

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

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

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

  5. CYQ.Data 支持WPF相关的数据控件绑定.Net获取iis版本

    CYQ.Data 支持WPF相关的数据控件绑定(2013-08-09) 事件的结果 经过多天的思考及忙碌的开发及测试,CYQ.Data 终于在UI上全面支持WPF,至此,CYQ.Data 已经可以方便 ...

  6. CYQ MAction,子表 新增,删除,修改 集合

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  7. CYQ.Data V5 从入门到放弃ORM系列:教程 - Log、SysLogs两个日志类使用

    Log 静态类介绍: Public Static (Shared) Methods GetExceptionMessage 获取异常的内部信息 WriteLogToDB Overloaded. 将日志 ...

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

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

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

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

随机推荐

  1. iOS自动检测版本更新

    虽然苹果官方是不允许应用自动检测更新,提示用户下载,因为苹果会提示你有多少个软件需要更新,但是有的时候提示用户一下有新版还是很有必要的. 首先说一下原理: 每个上架的苹果应用程序,都会有一个应用程序的 ...

  2. ***HTML +CSS 总结与归纳

    一.首先W3C标准 结构.表现.动作  与  html.css.javascript相对应,它本意是结构表现分离,而且按照html规范编写结构. 标签方面: -所有标签都要小写.关闭.并且合理嵌套,i ...

  3. 用ILSpy查看Session.SessionID的生成算法

    缘由 asp.net Session在InProc模式下,容易丢失,经常需要重新登录,且不支持分布式共享. 所以在研究Redis实现原生的Session,本来想用GUID作为key存入cookie,又 ...

  4. 攻城狮在路上(陆)-- hadoop分布式环境搭建(HA模式)

    一.环境说明: 操作系统:Centos6.5 Linux node1 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 ...

  5. JavaScript高级程序设计-(3) 变量、作用域和内存问题

    传递参数 ECMAScript所有函数参数都是按值传递的,即使对象在函数内部修改了参数的值,原始的引用任然不变,局部对象在函数执行完毕后被销毁

  6. c语言文件读写操作总结

    C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...

  7. 【MongoDB初识】-条件操作符

    1.条件>,<,>=,<=在MongoDB中的写法 >:$gt,<:$lt,>=:$gte,<=:$lte,<>:$ne 具体使用方法: d ...

  8. unity3d UGUI多语言

    从Foundation插件中抽离出的多语言.原理很简单,给Text绑定key,在程序开始时设置本地语言即可. 目录结构: LanguageEditor.cs:自定义编辑器: LanguageServi ...

  9. 【JBOSS】数据库连接配置小结

    数据库驱动位置: %JBOSS_HOME%\server\default\lib目录下. 数据库配置文件位置:JBOSS_HOME\docs\examples\jca\XXXX-ds.xml < ...

  10. Linux上Tomcat部署JavaWeb项目

    一.安装JDK 配置java的环境变量,修改/etc/profile文件:vi /etc/profile 然后按下字母i进入插入模式, shift+insert粘贴; esc退出编辑; :wq保存退出 ...