• C# 轻量级ORM 编写思维


    目标:

    降低研发人员门槛,提高效率,去除重复引用DLL的工作,基础配置由抽象工厂处理。

    基础扩展

    /// <summary>
    /// DataTable 转换为List 集合
    /// </summary>
    /// <typeparam name="TResult">类型</typeparam>
    /// <param name="dt">DataTable</param>
    /// <returns></returns>
    public static List<TResult> ToList<TResult>(this DataTable dt) where TResult : class,new()
    
     
    
    /// <summary>
    /// 转换为一个DataTable
    /// </summary>
    /// <typeparam name="TResult"></typeparam>
    /// <param name="value"></param>
    /// <returns></returns>
    public static DataTable ToDataTable<TResult>(this IEnumerable<TResult> value) where TResult : class
    

      

    业务逻辑接口

    //name:wujc 2013-06-20
    namespace Yc.BLL
    {
    public class DataDomain : IDataService
    {
    private readonly IDataService dal = DataAccess.CreateService();
    public DataDomain()
    { }
    #region 成员方法
    /// <summary>
    /// 获取表行数
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="strWhere"></param>
    /// <returns></returns>
    public int GetRowsCount<T>(string strWhere) where T : BaseModel, new() { return dal.GetRowsCount<T>(strWhere); }
    
    /// <summary>
    /// 获取表行数
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="sql"></param>
    /// <returns></returns>
    public int GetRowsCount(string sql) { return dal.GetRowsCount(sql); }
    
    /// <summary>
    /// 是否存在该记录
    /// </summary>
    public bool Exists<T>(string id) where T : BaseModel, new() { return dal.Exists<T>(id); }
    
    /// <summary>
    /// 增加一条数据
    /// </summary>
    public bool Add<T>(T model) where T : BaseModel, new() { return dal.Add<T>(model); }
    
    /// <summary>
    /// 增加多条数据
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="modelList"></param>
    /// <returns></returns>
    public bool Add<T>(List<T> modelList) where T : BaseModel, new() { return dal.Add<T>(modelList); }
    
    /// <summary>
    /// 更新一条数据
    /// </summary>
    public bool Update<T>(T model) where T : BaseModel, new() { return dal.Update<T>(model); }
    
    /// <summary>
    /// 更新多条数据
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="model"></param>
    /// <returns></returns>
    public bool Update<T>(List<T> modelList) where T : BaseModel, new() { return dal.Update<T>(modelList); }
    
    /// <summary>
    /// 删除一条数据
    /// </summary>
    public bool Delete<T>(string id) where T : BaseModel, new() { return dal.Delete<T>(id); }
    
    /// <summary>
    /// 删除一条数据
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="id"></param>
    /// <returns></returns>
    public bool Delete<T>(T model) where T : BaseModel, new() { return dal.Delete<T>(model); }
    
    /// <summary>
    /// 删除多条数据
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="model"></param>
    /// <returns></returns>
    public bool Delete<T>(List<T> modelList) where T : BaseModel, new() { return dal.Delete<T>(modelList); }
    
    /// <summary>
    /// 批量删除数据
    /// </summary>
    /// <param name="idList">逗号分隔</param>
    /// <returns></returns>
    public bool DeleteList<T>(string idList) where T : BaseModel, new() { return dal.DeleteList<T>(idList); }
    
    /// <summary>
    /// 得到一个对象实体
    /// </summary>
    public T GetModel<T>(string id) where T : BaseModel, new() { return dal.GetModel<T>(id); }
    
    /// <summary>
    /// 得到全部对象实体
    /// </summary>
    public List<T> GetModelList<T>(string strWhere) where T : BaseModel, new() { return dal.GetModelList<T>(strWhere); }
    
    /// <summary>
    /// 获得数据列表
    /// </summary>
    public DataSet GetList<T>(string strWhere) where T : BaseModel, new() { return dal.GetList<T>(strWhere); }
    
    /// <summary>
    /// 获得数据表
    /// </summary>
    public DataTable GetTable<T>(string strWhere) where T : BaseModel, new() { return dal.GetTable<T>(strWhere); }
    
    /// <summary>
    /// 根据分页获得数据列表
    /// </summary>
    public DataSet GetList<T>(string strWhere, string orderby, int startIndex, int endIndex) where T : BaseModel, new() { return dal.GetList<T>(strWhere, orderby, startIndex, endIndex); }
    
    /// <summary>
    /// 根据分页获得数据列表
    /// </summary>
    public DataSet GetListBySql(string sql, string orderby, int startIndex, int endIndex) { return dal.GetListBySql(sql, orderby, startIndex, endIndex); }
    
    /// <summary>
    /// 执行SQL语句,返回影响的记录数
    /// </summary>
    /// <param name="SQLString">SQL语句</param>
    /// <returns>影响的记录数</returns>
    public int ExecuteSql(string SQLString) { return dal.ExecuteSql(SQLString); }
    
    /// <summary>
    /// 执行查询语句,返回DataSet
    /// </summary>
    /// <param name="SQLString">查询语句</param>
    /// <returns>DataSet</returns>
    public DataSet Query(string SQLString) { return dal.Query(SQLString); }
    
    /// <summary>
    /// 执行多条SQL语句,实现数据库事务。
    /// </summary>
    /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
    public void ExecuteSqlTran(Hashtable SQLStringList) { dal.ExecuteSqlTran(SQLStringList); }
    #endregion 成员方法
    

      

    因为这还是个公司框架,还不能开源,不过看完以上接口定义之后,已经知道个大概了吧。

    数据逻辑抽象工厂,由抽象接口层,根据配置创建抽象实例,还有缓冲池等。

    数据逻辑基础方法和接口

    这些很基础的,网上也一大把,我只是为了配合框架做了一些小修改。

    接着,每创立一个新项目,都不需要重新再去重做一套orm 了, 引入以上所说的。

    接着,新增一个Model层,值得主意的是,Model要继承Yc.Base的BaseModel。

    示例:

    /// <summary>
        /// 用户表
        /// </summary>
        [System.Serializable()]
        public class UserInfo : Yc.Base.BaseModel
        {
            /// <summary>
            /// 初始化
            /// </summary>
            public UserInfo()
            {
                this.TableUser = "test";
            }
            private System.String _userInfoId;
    
            /// <summary>
            /// 用户Id,NVARCHAR2,128
            /// </summary>
            public System.String UserInfoId
            {
                get
                {
                    return _userInfoId ==null? "":_userInfoId;
                }
                set
                {
                    _userInfoId = value;
                }
            }        
            private System.String _name;
    
            /// <summary>
            /// 用户名,NVARCHAR2,500
            /// </summary>
            public System.String Name
            {
                get
                {
                    return _name ==null? "":_name;
                }
                set
                {
                    _name = value;
                }
            }        
            private System.String _pwd;
    
            /// <summary>
            /// 用户密码,NVARCHAR2,500
            /// </summary>
            public System.String Pwd
            {
                get
                {
                    return _pwd ==null? "":_pwd;
                }
                set
                {
                    _pwd = value;
                }
            }        
        }
    

      

    再引用你该项目的Model层

    一切就这样简单,希望对大家了解orm有所帮助!

    by:五加乘

  • 相关阅读:
    qemu 系列
    vuex
    gpio led学习
    [Java] 容器-03 增强的For循环 / Set 方法
    [Java] 容器-02 HashSet 类 / Iterator 接口
    [Java] 容器-01 实现 Comparable 接口 / 重写 equals 与 hashCode (1个图 1个类 3个知识点 6个接口)
    [Java] 常用类-03 File 类 (io 包中的 File) / Enum 类
    [Java] 常用类-02 基础数据类型包装类 / Math 类
    [Java] 常用类-01 String / StringBuffer
    [Java] 数组-05 binarySearch / TestArrayCopy
  • 原文地址:https://www.cnblogs.com/cheng5x/p/3698960.html
Copyright © 2020-2023  润新知