zoukankan      html  css  js  c++  java
  • Dapper 仓储接口类 实现总结

    using CustomerInterface;
    using Dapper;
    
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq.Expressions;
    using System.Linq;
    using IITDeduction.CustomerDAL.Expressions;
    using DapperExtensions;
    using DapperExtensions.Mapper;
    using DapperExtensions.Sql;
    using IITDeduction.Common;
    
    namespace IITDeduction.CustomerDAL
    {
        public class DapperRepository<T> : IDisposable,IRepository<T> where T : class
        {
             
    
            private IDbConnection _innerConn = null;
            private IDbTransaction _innerTran = null;
    
            private IDbConnection _refConn = null;
            private IDbTransaction _refTran = null;
    
            /// <summary>
            /// 返回仓储类当前连接
            /// </summary>
            public IDbConnection Connection
            {
                get
                {
                    if (_refConn != null)
                    {
                        return _refConn;
                    }
                    else
                    {
                        return _innerConn;
                    }
                }
            }
    
            /// <summary>
            /// 返回仓储类当前事务
            /// </summary>
            public IDbTransaction Transaction
            {
                get
                {
                    if (_refTran != null)
                    {
                        return _refTran;
                    }
                    else
                    {
                        return _innerTran;
                    }
                }
            }
    
            public DapperRepository()
            {
                _innerConn = DbConnectionFactory.CreateDbConnection();
                _innerConn.Open();
                _innerConn.Execute("SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED");
            }
    
            public DapperRepository(IDbConnection conn,IDbTransaction trans=null)
            {
                if (conn == null)
                {
                    throw new Exception("conn can not be null!");
                }
    
                if (trans != null)
                {
                    if (trans.Connection != conn)
                    {
                        throw new Exception("trans'connection must be same as conn!");
                    }
                }
                _refConn = conn;
                _refTran = trans;
            }
    
            public void BeginTrans()
            {
                _innerTran = this.Connection.BeginTransaction(IsolationLevel.ReadUncommitted);
            }
    
            public void Rollback()
            {
                if (Transaction != null)
                {
                    this.Transaction.Rollback();
                }
            }
    
            public void Commit()
            {
                if (this.Transaction != null)
                {
                    this.Transaction.Commit();
                }
            }
            /// <summary>
            /// 添加数据
            /// </summary>
            /// <param name="entity">添加数据对象</param>
            /// <returns>返回插入数据的主键</returns>
            public dynamic Add(T entity)
            {
                return this.Connection.Insert<T>(entity,this.Transaction);
            }
            /// <summary>
            /// 添加多组数据
            /// </summary>
            /// <param name="entitys">IEnumerable<T></param>
            /// <returns></returns>
            public List<dynamic> AddBatch(IEnumerable<T> entitys)
            {
                List<dynamic> retVal = new List<dynamic>();
                foreach (T entity in entitys)
                {
                   retVal.Add( Add(entity));
                }
                return retVal;
            }
            /// <summary>
            /// 更新数据
            /// </summary>
            /// <param name="entity"></param>
            /// <returns>bool</returns>
            public bool Update(T entity)
            {
                return this.Connection.Update(entity,this.Transaction);
            }
            /// <summary>
            /// 删除数据 根据对象删除
            /// </summary>
            /// <param name="entity"></param>
            /// <returns>bool</returns>
            public bool Delete(T entity)
            {
                return this.Connection.Delete(entity, this.Transaction);
            }
    
            /// <summary>
            /// 删除数据  根据主键Id删除
            /// </summary>
            /// <param name="Id"></param>
            /// <returns></returns>
            public bool Delete(object predicate=null)
            {
                return this.Connection.Delete(predicate, this.Transaction);
            }
            /// <summary>
            /// 获取数据
            /// </summary>
            /// <param name="Id"></param>
            /// <returns></returns>
            public T Get(object Id)
            {
                return this.Connection.Get<T>(Id,this.Transaction);
            }
            /// <summary>
            /// 返回所有数据
            /// </summary>
            /// <returns></returns>
            public IEnumerable<T> GetAll()
            {
                return this.Connection.GetList<T>(this.Transaction);
            }
    
            public IEnumerable<T> GetList(string sql, object parameters = null)
            {
                return this.Connection.Query<T>(sql, parameters,this.Transaction);
            }
    
            public int Execute(string sql, object parameters = null)
            {
                return this.Connection.Execute(sql, parameters, this.Transaction);
            }
    
    
            public IEnumerable<T> GetList(IPredicateGroup predGroup,  List<ISort> sort)
            {
                IEnumerable<T> list = this.Connection.GetList<T>(predGroup, sort, this.Transaction);
                return list;
    
            }
    
            public Tuple<int, IEnumerable<T>> GetPage(IPredicateGroup predicate, int pageindex, int pageSize,List<ISort> sort)
            {
                var multi = this.Connection.GetPage<T>(predicate, sort, pageindex, pageSize,this.Transaction);
                var count = multi.Count();
                var results = multi.ToList();
                return new Tuple<int, IEnumerable<T>>(count, results);
            }
    
            public PagedDataTable GetPagedTable(IPredicateGroup predicate, int pageindex, int pageSize, IList<ISort> sort)
            {
                var totalCount=this.Connection.Count<T>(predicate,this.Transaction);
    
                List<T> multi = this.Connection.GetPage<T>(predicate, sort, pageindex, pageSize, this.Transaction).ToList();
    
                PagedDataTable retVal = new PagedDataTable() { 
                    Data=IITDeductionDataType.Convert<T>(multi),
                    TotalCount = totalCount,
                    PageIndex=pageindex,
                    PageSize=pageSize
                };
    
                return retVal;
            }
    
    
            public long Count(IPredicateGroup predicate)
            {
                return this.Connection.Count<T>(predicate, this.Transaction);
            }
    
            public  object ExecuteScalar(string query, object parameters = null)
            {
                return  this.Connection.ExecuteScalar(query, parameters,this.Transaction);
            }
    
            /// <summary>
            /// 多条件组合查询
            /// </summary>
            /// <param name="predGroup"></param>
            /// <returns>IEnumerable<T></returns>
            public IEnumerable<T> QueryByPredGroup(IPredicateGroup predGroup, List<ISort> sort)
            {
                IEnumerable<T> list = this.Connection.GetList<T>(predGroup, sort);
                return list;
            }
            /// <summary>
            /// 查询返回List<object>
            /// </summary>
            /// <typeparam name="TAny">自定义传输返回的Obect</typeparam>
            /// <param name="query">querySql</param>
            /// <param name="parameters">querySql参数</param>
            /// <returns></returns>
            public IEnumerable<TAny> Query<TAny>(string query, object parameters = null) where TAny : class
            {
                return Connection.Query<TAny>(query, parameters, Transaction);
            }
            /// <summary>
            /// 通过Linq方式查询
            /// </summary>
            /// <param name="expression"></param>
            /// <returns></returns>
            public T FirstOrDefault(Expression<Func<T, bool>> expression)
            {
                IPredicate ipredicate = expression.ToPredicateGroup();
    
                var List = this.Connection.GetList<T>(ipredicate,null,this.Transaction).FirstOrDefault();
                return List;
            }
            /// <summary>
            /// 通过Linq获取LIST数据
            /// </summary>
            /// <param name="expression"></param>
            /// <returns></returns>
            public IEnumerable<T> GetList(Expression<Func<T, bool>> expression)
            {
                IPredicate ipredicate = expression.ToPredicateGroup();
                IEnumerable<T> list = this.Connection.GetList<T>(expression, null, this.Transaction);
                return list;
            }
    
    
            public string AddPageQuery(string sql)
            {
    
                string querySql ="select * from("+sql
                    
                    + @")AS RowConstrainedResult
                                 WHERE RowNum >= (@PageIndex * @PageSize + 1)
                                     AND RowNum <= (@PageIndex + 1) * @PageSize
                                 ORDER BY RowNum";
    
                return querySql;
            }
    
    
    
            public void Dispose()
            {
                if (_innerTran != null)
                {
                    _innerTran.Dispose();
                    _innerTran = null;
                }
    
                if (_innerConn != null)
                {
                    _innerConn.Close();
                    _innerConn.Dispose();
                    _innerConn = null;
                }
            }
    
    
        }
    }
    View Code
    using DapperExtensions;
    using Spring.Web.UI;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Linq.Expressions;
    using System.Text;
    
    namespace CustomerInterface
    {
        public interface IRepository<T> where T : class
        {
            IDbConnection Connection{get;}
            IDbTransaction Transaction{get;}
    
            dynamic Add(T entity);
    
            List<dynamic> AddBatch(IEnumerable<T> entitys);
    
            bool Update(T entity);
    
            bool Delete(T entity);
    
            bool Delete(object Id);
    
            T Get(object Id);
    
            IEnumerable<T> GetAll();
    
            IEnumerable<T> GetList(string sql, object parameters = null);
    
            int Execute(string sql, object parameters = null);
    
            long Count(IPredicateGroup predicate);
            object ExecuteScalar(string query, object parameters = null);
    
    
            T FirstOrDefault(Expression<Func<T, bool>> expression);
            IEnumerable<T> GetList(Expression<Func<T, bool>> expression);
            IEnumerable<T> GetList(IPredicateGroup predGroup, List<ISort> sort);
    
            IEnumerable<TAny> Query<TAny>(string query, object parameters = null) where TAny : class;
    
            
    
    
    
    
        }
    }
    View Code
    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Text;
    
    namespace IITDeduction.CustomerDAL
    {
        public class DbConnectionFactory
        {
    
            private static readonly string connectionString;
            private static readonly string databaseType;
    
            static DbConnectionFactory()
            {
                connectionString = ConfigurationManager.AppSettings["IITDeductionConnection"];
                databaseType = ConfigurationManager.AppSettings["IITDeductionProvider"];
            }
    
            public static IDbConnection CreateDbConnection()
            {
                IDbConnection connection = null;
                switch (databaseType)
                {
                    case "system.data.sqlclient":
                        connection = new System.Data.SqlClient.SqlConnection(connectionString);
                        break;
                    case "mysql":
                        //connection = new MySql.Data.MySqlClient.MySqlConnection(connectionString);
                        break;
                    case "oracle":
                        //connection = new Oracle.DataAccess.Client.OracleConnection(connectionString);
                        //connection = new System.Data.OracleClient.OracleConnection(connectionString);
                        break;
                    case "db2":
                        connection = new System.Data.OleDb.OleDbConnection(connectionString);
                        break;
                    default:
                        connection = new System.Data.SqlClient.SqlConnection(connectionString);
                        break;
                }
                return connection;
            }
        }
    }
    View Code
  • 相关阅读:
    【全网最全的博客美化系列教程】文章总目录
    不要再被骗了------QQ盗号原理大揭秘
    努力的孩子运气不会太差,跌宕的人生定当更加精彩
    我的七条人生哲理以及个人学习方法总结
    博客园自定义页面风格设计 后续篇(页面设计模式及代码高亮 鼠标点击效果升级)
    【资料分享】500篇干货解读人工智能新时代
    我的大一生活以及在博客园写博客的这一年
    博客园自定义页面风格设计
    ACM退役记&&回忆录
    留言板
  • 原文地址:https://www.cnblogs.com/MasterLin/p/11159013.html
Copyright © 2011-2022 走看看