CYQ.Data 数据层框架

CYQ.Data 是一款由路过秋天创作的支持多数据库应用[Txt,Xml,Access,MSSQL,Oracle,SQLite,MySql]的底层数据库操作类库,使用本类库可以轻松快速开发项目(QQ群:6033006)。

CYQ.Data.Orm.DBFast 新增类介绍

框架原理 | | | 发表日期 :2013/10/13 17:08:27#楼主  

前言:

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

也不是全不能上,房间里有三台能上网的机子(两台笔记本+一台台式机),下载资料还得用公司的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 { getset; }
        /// <summary>
        
/// 用户名
        
/// </summary>
        public string UserName { getset; }
        /// <summary>
        
/// 创建日期
        
/// </summary>
        public DateTime? CreateTime { getset; }
    }
}

对于这样的实体,默认的数据库链接就是:

<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静态类的源码:

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 whereparams 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>(00nullout count, null);
        }
        /// <summary>
        
/// 列表查询
        
/// </summary>
        
/// <param name="where">查询条件[可附带 order by 语句]</param>
        
/// <returns></returns>
        public static List<T> Select<T>(string whereparams string[] columns)
        {
            int count;
            return Select<T>(00whereout 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 whereparams string[] columns)
        {
            int count;
            return Select<T>(1, topN, whereout count, columns);
        }
        public static List<T> Select<T>(int pageIndex, int pageSize, params string[] columns)
        {
            int count;
            return Select<T>(pageIndex, pageSize, nullout count, columns);
        }
        public static List<T> Select<T>(int pageIndex, int pageSize, string whereparams string[] columns)
        {
            int count;
            return Select<T>(pageIndex, pageSize, whereout 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 whereout 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, whereout 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;
        }
    }




新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"
游客[注册][60.190.25.*]2013/12/23 21:10:41#1
不知道算不算bug。
比如class Parent,有属性Name,class Child : Parent 继承。
DBFast.Find<Child>(name),返回child.Name = null。
当Child重写Name属性后,返回child.Name = name。
回复之前不支持继承属性,现在已经支持了。

发表评论

论坛公告

    数据框架 CYQ.Data QQ群:6033006
    使用本框架进行开发,入门简单,开发效率高,性能优越,更有详尽的API文档,有相关的使用帮助文章、示例文章、更甚有相关的视频教程及辅助工具。 关键还是免费与开源,实在是居家旅行、项目开发、学习研究的必备良品!!!!!!


    在线帮助:欢迎联系

帖子搜索