前言:

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

也不是全不能上,房间里有三台能上网的机子(两台笔记本+一台台式机),下载资料还得用公司的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 > 0)
                {
                    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>(0, 0, 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>(0, 0, 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>(1, 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 > 0)
                {
                    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 > 1)
            {
                conn = items[items.Length - 2] + "Conn";
                items = null;
            }
            string tName = t.Name;
            t = null;
            return tName;
        }
    }

结束语:

新进的公司,一开始以为是开发电子商务类的网站,所以我经三考虑的架构选型不是WebForm也不是MVC,而是打算采用QBlog那一套的框架,还特意思改进了CYQ.Data里的XHtmlAction模板引擎,增加了CMS的标签功能,以为要上战场,结果进去一天就发现,是开发的分销商订单系统,数据是和ERP对接,于是架构目前选型就变更为EasyUI+CYQ.Data+WebForm了。

下周应该会招一两个战友,人在广州的有兴趣的可以给我发私信。 

转载于:https://www.cnblogs.com/webenh/p/6146336.html

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

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

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

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

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

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

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

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

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

  5. CYQ.Data.ProjectTool 项目配置工具发布(包源码)

    2019独角兽企业重金招聘Python工程师标准>>> 前言: 一直被网友催,说要更新下  CYQ.Data 的枚举生成器,这工具自从V4.5版本之后,就没再发布过新版本,事实上,我 ...

  6. cyq.data 连接mysql_CYQ.Data V5文本数据库技术原理解密

    前言: 这两天有点感冒状态,除了以前折腾 微博粉丝精灵 腾到三更,最近也在折腾个别工具到四更,偶尔心来心潮,赶紧写写文章,最近有很多朋友对CYQ.Data V5里的文本数据库感兴趣,这里就给大伙说下文 ...

  7. cyq.data 连接mysql_CYQ.Data 轻量数据层之路 使用篇一曲 裸身走天涯(十二)

    其实本来是不想写使用帮助的,因为在以下的文章中,都有大量的示例存在: 不过很多人还是很懒啊,一进群就用问怎么用. 发个文章路径让其看吧,又说太麻烦,使用复杂,于是想了想,还是写写使用教程,让这部分懒人 ...

  8. CYQ.Data 轻量数据层之路 V2.0 震撼惊世 支持多数据库/内置Aop(二十五)

    所有文章索引:CYQ.Data 轻量数据层之路 框架开源系列 索引 前言: 从V1.5发布到现在时隔20天了,终于发布2.0版本了,2.0系列版本由于引入多数据库支持,内部结构改动较大. 但是外面调用 ...

  9. 会声会影Video Studio 2023 旗舰版新增功能介绍

    会声会影2023旗舰版(Corel VideoStudio Ultimate 2023)(亦称绘声绘影)是一款功能强大的视频编辑软件,入手非常简单,可以帮助用户制作优秀的视频内容,支持视频编辑和视频特 ...

最新文章

  1. fastdfs java client_fastdfs-client-java操作fastdfs5.0.4
  2. 小时代5-perl的INC设置分析
  3. 在Struts2 的Action中怎样获取表单提交上来的多个checkbox的值
  4. LeetCode 2200. 找出数组中的所有 K 近邻下标
  5. Error: EBUSY: resource busy or locked, lstat ‘D:\DumpStack.log.---基于Vue的uniapp手机端_前端UI_uview工作笔记004
  6. 在 Pycharm 中安装 wxPython
  7. 数据库中存储引擎 myISAM 与 innoDB 比较
  8. 简单解析三种JAVA调用方式-同步,异步,回调
  9. 上传文件到云服务器一般用什么软件?
  10. linux培训哪家好?Linux520内部培训教程
  11. 《赖氏经典英语语法》第五集
  12. 网络基础——网络层(ip协议详解)
  13. 「游戏开发」游戏服务器端开发的一些经验
  14. 安全、可靠、合规,华为云守护企业网站安全
  15. 蚁群算法(ant system,AS)
  16. 网络存储技术Windows server 2012 (项目二 动态磁盘的配置与管理)
  17. 前端Vue和计网面试题总结
  18. 快速批量修改文件名字
  19. Visual Studio 2022安装到非C盘完全指南
  20. 三种数字调制的形式:ASK PSK FSK

热门文章

  1. sublime c语言如何编译,Sublime Text 3 实现C语言代码的编译和运行(示例讲解)
  2. 扑捉和捕捉的区别照相_扑捉和捕捉的区别照相
  3. java程序结构_java程序的三种结构
  4. sas 文件传输 本地 服务器,SLIM SAS SFF-8654服务器转换线让传输更容易!
  5. ser crt linux 乱码,大师为你解决securecrt中文乱码【处理指南】
  6. 输出流_关于输出字符流你真的懂了吗?
  7. kind富文本编辑器_在项目中集成富文本编辑器
  8. 盒子模型实验报告总结_真刀真枪模块化(2)——图解Service模型
  9. 湖南科技大学计算机男女比例,湖师大文学院新生男女比例1:9 成了“女儿国”...
  10. 【BZOJ4196】【codevs4621】软件包管理器,树链剖分练习