CWF框架之CWF.MappingHelper

作为数据库映射的处理程序这里先感谢博客园的callhot老师的指点,把原本的xml做的构架解析换成了属性的解析,节省了大量的xml文件的管理,并且使用起来也更加方便。

另外我这个人写博客很懒,写写博客只希望交流一下自己做项目里的一些经验,所以就上代码了。理论只是博客园非常多。

下面这个类用来标识一个表的特性,自己做了点扩展,把单表的做了外键关联,但是实际应用上好像很少可以用到。

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
namespace CWF.MappingHelper
{
    /// <summary>  
    /// 表的特性类 
    /// 开发者:欧阳寒玟
    /// 开发时间:2010-01-11
    /// 修改时间:2010-11-01
    /// </summary>  
    [AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
    public class TableAttribute : Attribute
    {
       
        private string dbTableName;
        /// <summary>
        /// 表名
        /// </summary>
        public string TableName
        {

            get
            {
                return this.dbTableName;
            }
            set
            {
                this.dbTableName = value;
            }

        }

        private string directions;
        /// <summary>
        /// 表说明
        /// </summary>
        public string Disrections
        {
            get { return directions; }
            set { directions = value; }
        }

        /// <summary>
        /// 实例化
        /// </summary>
        /// <param name="tableName">表名</param>
        public TableAttribute(string tableName)
        {
            this.dbTableName = tableName;
        }

    } 

 

}
下面是表字段的标识

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
namespace CWF.MappingHelper
{
    /// <summary>
    /// 字段特性
    /// </summary>
    [AttributeUsage(AttributeTargets.All, AllowMultiple = false)]
    public class ColumnAttribute : Attribute
    {
        private string dbColumnName;
        /// <summary>
        /// 数据列名
        /// </summary>
        public string DbColumnName
        {

            get
            {
                return this.dbColumnName;

            }
            set
            {
                this.dbColumnName = value;

            }

        }

        private DbType dbType;
        /// <summary>
        /// 数据类型
        /// </summary>
        public DbType DbType
        {

            get
            {

                return this.dbType;

            }

            set
            {

                this.dbType = value;

            }

        }

        private bool isPrimary;
        /// <summary>
        /// 是否是主键
        /// </summary>
        public bool IsPrimary
        {

            get
            {

                return this.isPrimary;

            }

            set
            {

                this.isPrimary = value;

            }

        }

        private bool isIdentify;
        /// <summary>
        /// 是否递增
        /// </summary>
        public bool IsIdentify
        {

            get
            {

                return this.isIdentify;

            }

            set
            {

                this.isIdentify = value;

            }

        }

        private object defaultValue;
        /// <summary>
        /// 默认值
        /// </summary>
        public object DefaultValue
        {

            get
            {

                return this.defaultValue;

            }

            set
            {

                this.defaultValue = value;

            }

        }

        private int length;
        /// <summary>
        /// 数据长度
        /// </summary>
        public int DbLength
        {

            get
            {

                return this.length;

            }

            set
            {

                this.length = value;

            }

        }

        private bool isForeign;
        /// <summary>
        /// 是否外键
        /// </summary>
        public bool IsForeign
        {
            get { return isForeign; }
            set { isForeign = value; }
        }

        private Type foreignModel;
        /// <summary>
        /// 外键实体model
        /// </summary>
        public Type ForeignModel
        {
            get { return foreignModel; }
            set { foreignModel = value; }
        }
        /// <summary>
        /// 得到空的默认值
        /// </summary>
        /// <returns></returns>
        private object GetDefaultValue()
        {
            return new object();
        }

        /// <summary>
        /// 实例化类赋值列名
        /// </summary>
        /// <param name="dbName"></param>
        public ColumnAttribute(string dbName)
        {

            this.dbColumnName = dbName;

            this.isPrimary = false;

            this.defaultValue = this.GetDefaultValue();

        }
        public ColumnAttribute(string dbName, Boolean IsForeign,Type model)
        {
            this.dbColumnName = dbName;
            this.isPrimary = false;
            this.defaultValue = this.GetDefaultValue();
            this.isForeign = IsForeign;
            this.ForeignModel = model;
        }
        public ColumnAttribute(string dbName,DbType type, Boolean IsForeign, Type model)
        {
            this.dbColumnName = dbName;
            this.isPrimary = false;
            this.defaultValue = this.GetDefaultValue();
            this.isForeign = IsForeign;
            this.ForeignModel = model;
            this.DbType = type;
        }
        public ColumnAttribute(string dbName, DbType type,object value, Boolean IsForeign, Type model)
        {
            this.dbColumnName = dbName;
            this.isPrimary = false;
            this.defaultValue = value;
            this.isForeign = IsForeign;
            this.ForeignModel = model;
            this.DbType = type;
        }
        public ColumnAttribute(string dbName, object value, Boolean IsForeign)
        {
            this.dbColumnName = dbName;
            this.isPrimary = false;
            this.defaultValue = value;
            this.isForeign = IsForeign;
           
        }
        /// <summary>
        /// 实例化类赋值列名,主键
        /// </summary>
        /// <param name="dbName"></param>
        /// <param name="isPrimery"></param>
        public ColumnAttribute(string dbName, bool isPrimery)
        {
            this.dbColumnName = dbName;
            this.isPrimary = isPrimery;
            this.defaultValue = this.GetDefaultValue();
        }
        /// <summary>
        /// 实例化
        /// </summary>
        /// <param name="dbName"></param>
        /// <param name="isPrimery"></param>
        /// <param name="dValue"></param>
        public ColumnAttribute(string dbName, bool isPrimery, object dValue)
        {
            this.dbColumnName = dbName;
            this.isPrimary = isPrimery;
            this.defaultValue = this.GetDefaultValue();
        }
        /// <summary>
        /// 实例化类赋值列名,主键,数据类型
        /// </summary>
        /// <param name="dbName"></param>
        /// <param name="isPrimery"></param>
        /// <param name="type"></param>
        public ColumnAttribute(string dbName, bool isPrimery, DbType type)
        {
            this.dbColumnName = dbName;
            this.isPrimary = isPrimery;
            this.dbType = type;
            this.defaultValue = null;
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="dbName"></param>
        /// <param name="isPrimery"></param>
        /// <param name="identify"></param>
        /// <param name="type"></param>
        public ColumnAttribute(string dbName, bool isPrimery,bool identify, DbType type)
        {
            this.dbColumnName = dbName;
            this.isPrimary = isPrimery;
            this.dbType = type;
            this.defaultValue = null;
            this.IsIdentify = identify;
        }

    }

}
用这两个类给数据实体打上标记就看非常方便的进行操作了,而且可维护性还不错,不用去维护一大堆的xml文件。

下面是数据的操作类接口。

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.Specialized;
using System.Runtime.CompilerServices;
using System.Data;
namespace CWF.MappingHelper
{
    /// <summary>
    /// 数据查询接口
    /// 开发者:欧阳寒玟
    /// 开发时间:2010-10-09
    /// </summary>
    public interface IQuery
    {
        /// <summary>
        /// 数据操作的类
        /// </summary>
        CWF.DataHelper.IDbHelper DBHelper { get; set; }
        #region "Query"
        /// <summary>
        /// 根据一个模型和主键的值得到这个模型的实体
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="model"></param>
        /// <param name="value">主键的值</param>
        /// <returns></returns>
        T Query<T>(object value) where T : new();
        /// <summary>
        /// 根据查询条件返回model
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="Dictionary">参数</param>
        /// <returns></returns>
        T Query<T>(string where) where T: new ();
        /// <summary>
        /// 根据参数返回model
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="prameters"参数数组></param>
        /// <returns></returns>
        T Query<T>(IDbDataParameter[] parameters) where T : new();
        /// <summary>
        /// 根据查询条件返回DataTable
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="model"></param>
        /// <param name="where">查询条件</param>
        /// <returns></returns>
        System.Data.DataTable QueryTable<T>(string where) where T : new();
        /// <summary>
        /// 根据参数返回DataTable
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="prameters">参数数组</param>
        /// <returns></returns>
        System.Data.DataTable QueryTable<T>(IDbDataParameter[] parameters) where T : new();
        /// <summary>
        /// 查询一个集合
        /// 得到单值形式的数据
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        List<T> QueryList<T>(string where) where T : new();
        /// <summary>
        /// 根据参数查询一个集合
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="prameters">参数数组</param>
        /// <returns></returns>
        List<T> QueryList<T>(IDbDataParameter[] parameters) where T : new();
        #endregion
        #region "Convent"
        /// <summary>
        /// 把表转换成modle 返回 list<T>
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="table"></param>
        /// <returns></returns>
        List<T> ConventToList<T>(System.Data.DataTable table) where T : new();
        /// <summary>
        /// 把实体模型转换成键值对
        /// 得到已键值对形式的数据
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        IDictionary<string, object> ConventToDic<T>(T model);
        /// <summary>
        /// 把字典转换为datatable
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="model"></param>
        /// <param name="dictionary"></param>
        /// <returns></returns>
        System.Data.DataTable ConventToTable(IDictionary<string, object> dictionary);
        /// <summary>
        /// 根据主键返回model,该方法不兼容access
        /// 兼容access请使用GetModelByPrimaryKey<T>(IDbDataParameter prameter)
        /// </summary>
        /// <typeparam name="T">数据类型</typeparam>
        /// <param name="Key"></param>
        /// <returns></returns>
        T GetModelByPrimaryKey<T>(object Key) where T:new();
        /// <summary>
        /// 根据主键返回model,该方法兼容access
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="prameter">参数</param>
        /// <returns></returns>
        T GetModelByPrimaryKey<T>(IDbDataParameter[] prameter) where T : new();
        /// <summary>
        /// 把一行数据装进model
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="row"></param>
        /// <returns></returns>
        T ConventToModel<T>(System.Data.DataRow row) where T : new();
        #endregion
        #region "ADD"
        /// <summary>
        /// 添加一条记录
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="model"></param>
        /// <returns></returns>
        object Add(object model);
        /// <summary>
        /// 添加一条记录,采用参数模式
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="parameters">Parameters</param>
        /// <returns></returns>
        object Add<T>(IDbDataParameter[] parameters) where T : new();
        /// <summary>
        /// 添加list个记录
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="list"></param>
        /// <returns></returns>
        int AddList<T>(IList<T> list);
        /// <summary>
        /// 添加一行记录
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dr"></param>
        /// <returns></returns>
        int AddDBRow<T>(DataRow dr) where T : new();
        /// <summary>
        /// 把整个表添加
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dt"></param>
        /// <returns></returns>
        int AddDBTable<T>(DataTable dt) where T : new();
        #endregion

        #region "Update"
        /// <summary>
        /// 更新整个model
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        int Update<T>(T model);
        /// <summary>
        /// 更新,除递增字段以外的所有model包含的字段.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="model"></param>
        /// <param name="where">筛选条件</param>
        /// <returns></returns>
        int Update<T>(T model, string where);
   
        /// <summary>
        /// 更新部分实体类
        /// </summary>
        /// <param name="Prameters">参数</param>
        /// <returns></returns>
        int UpdateColumn<T>(IDbDataParameter[] Prameters) where T : new();
        /// <summary>
        /// 更新,自己填写where子句
        /// </summary>
        /// <typeparam name="T">model类型</typeparam>
        /// <param name="Prameters">要跟新的参数</param>
        /// <param name="where">筛选类型</param>
        /// <returns></returns>
        int UpdateColumn<T>(IDbDataParameter[] Prameters, string where) where T : new();
       
        #endregion

        #region "Dlete"
        /// <summary>
        /// 根据主键删除记录
        /// </summary>
        /// <param name="key">主键值</param>
        /// <returns></returns>
        int Dlete<T>(object key) where T:new();
        /// <summary>
        /// 根据筛选条件删除记录
        /// </summary>
        /// <typeparam name="T">model类</typeparam>
        /// <param name="model">modle</param>
        /// <param name="where">筛选条件</param>
        /// <returns></returns>
        int Dlete<T>(string where) where T:new();
        #endregion

        #region "Transaction"
        /// <summary>
        /// 开始事务
        /// </summary>
        void BeginTransaction(IDbTransaction tran);
        /// <summary>
        /// 开始一个默认事务
        /// </summary>
        void BeginTransaction();
        /// <summary>
        /// 是否提交事务
        /// </summary>
        /// <returns></returns>
        bool Commit();


        /// <summary>
        /// 是否回滚
        /// </summary>
        /// <returns></returns>
        bool RollBack();


        /// <summary>
        /// 是否进行事务
        /// </summary>
        bool IsTransaction{get;}
        #endregion
    }
}
自己在做项目的时候也是只图方便,有些东西不是很完善,比如实体类并没有继承统一的接口或者类,所以不好规范,但是唯一一点就是new() 是必须都有的,而且class也是基本保证。

下面就是一个基本使用方法

/// <summary>
    /// 表Degree的模型
    /// </summary>
    [CWF.MappingHelper.Table("Degree")]
    class Degree
    {
        private int _id;
        private string _name;
        private int _creatorid;
        private string _creatorname;
        private DateTime _createdate;
        [CWF.MappingHelper.Column("ID", true,true, DbType.Int32)]
        public int ID
        {
            get { return _id; }
            set { _id = value; }
        }
        [CWF.MappingHelper.Column("Name", false,false, DbType.String)]
        public string Name
        {
            set { _name = value; }
            get { return _name; }
        }
        [CWF.MappingHelper.Column("CreatorId", false, false, DbType.Int32)]
        public int CreatorId
        {
            set { _creatorid = value; }
            get { return _creatorid; }
        }
        [CWF.MappingHelper.Column("CreatorName", false, false, DbType.String)]
        public string CreatorName
        {
            set { _creatorname = value; }
            get { return _creatorname; }
        }
        [CWF.MappingHelper.Column("CreateDate", false, false, DbType.DateTime)]
        public DateTime CreateDate
        {
            set { _createdate = value; }
            get { return _createdate; }
        }
    }

 

给表和字段打上标记就非常方便的使用了,这里非常感谢callhot老师。

具体的使用方法实例:

IQuery query = new QueryHelper();
向Degree表添加一条记录
query.Add(d);
//更新Degree表id为0的数据
IDbDataParameter[] parameters = new SqlParameter[] {

    new SqlParameter("@CreateDate",System.DateTime.Now),
    new SqlParameter("@CreatorId",1),
    new SqlParameter("@CreatorName","ok"),
    new SqlParameter("@Name","寒玟")
};
Degree de = query.Query<Degree>(parameters);
IDictionary<string, object> idic = query.ConventToDic<Degree>(d);
IList<Degree> list = new List<Degree>();
query.IsTransaction();
query.BeginTransaction();
list.Add(d);
list.Add(d);
list.Add(d);
list.Add(d);
list.Add(d);
list.Add(d);
list.Add(d);
list.Add(d);
query.AddList<Degree>(list);
int num = query.Dlete<Degree>("id>4");

MessageBox.Show(ServerSession<string>.log.name);
query.Update<Degree>(d);

//查询id=0的Degree模型
Degree de = query.Query<Degree>("id=0");
//修改查询用的连接字符串
query.DBHelper.ConnectionString = "";
//查询满足条件的一系列list的model集合
IList<Degree> list= query.QueryList<Degree>("id<>0");
//查询满足条件的datatable集合
DataTable dt= query.QueryTable<Degree>("id<>0");
//把一行数据转换成一个模型
Degree deg = query.ConventToModel<Degree>(dt.Rows[0]);
//把模型Degree转换成键值对的字典模式
IDictionary<string, object> IDC = query.ConventToDic<Degree>(d);
foreach (KeyValuePair<string, object> keys in IDC)
{
    textBox1.Text +=keys.Key+":"+ keys.Value.ToString() + "-";
    comboBox1.Items.Add(keys.Value);
}

OK结束。欢迎板砖和鸡蛋。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值