Dapper的使用


輕量型ORM框架Dapper的使用

        /// <summary>
        /// 查詢操作
        /// </summary>
        /// <typeparam name="T">返回集合的類型</typeparam>
        /// <param name="sql">sql語句</param>
        /// <param name="param">參數化值</param>
        /// <returns></returns>
        public IEnumerable<T> Query<T>(string sql, object param)
        {
            IEnumerable<T> _list = default(IEnumerable<T>);
            if (!string.IsNullOrEmpty(sql))
            {
                try
                {
                    _list = DbConnection.Query<T>(sql, param);
                }
                catch { }
            }
            return _list;
        }

        /// <summary>
        /// 執行存儲過程查詢操作
        /// </summary>
        /// <typeparam name="T">返回集合的類型</typeparam>
        /// <param name="storedName">存儲過程</param>
        /// <param name="param">參數化值</param>
        /// <returns></returns>
        public IEnumerable<T> QueryStored<T>(string storedName, object param)
        {
            IEnumerable<T> _list = default(IEnumerable<T>);
            if (!string.IsNullOrEmpty(storedName))
            {
                try
                {
                    _list = DbConnection.Query<T>(storedName,commandType: CommandType.StoredProcedure);
                }
                catch { }
            }
            return _list;
        }

        /// <summary>
        /// 查詢操作返回默認第一條數據(如返回null則創建默認類型)
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="sql"></param>
        /// <param name="param"></param>
        /// <returns></returns>
        public T FirstOrDefault<T>(string sql, object param)
        {
            var model = default(T);
            if (!string.IsNullOrEmpty(sql))
            {
                try
                {
                    model = DbConnection.Query<T>(sql, param).FirstOrDefault();
                }
                catch { }
            }
            return model == null ? Activator.CreateInstance<T>() : model;
        }



        /// <summary>
        /// 查詢一組SQL語句並返回值
        /// </summary>
        /// <typeparam name="T1">第一條語句返回集合類型</typeparam>
        /// <typeparam name="T2">第二條語句返回集合類型</typeparam>
        /// <param name="sql">sql語句</param>
        /// <param name="param">參數化值</param>
        /// <returns></returns>
        public Tuple<IEnumerable<T1>, IEnumerable<T2>> Query<T1, T2>(string sql, object param)
        {
            IEnumerable<T1> _item1 = null; IEnumerable<T2> _item2 = null;
            if (!string.IsNullOrEmpty(sql))
            {
                try
                {
                    using (var multi = DbConnection.QueryMultiple(sql, param))
                    {
                        _item1 = multi.Read<T1>();
                        _item2 = multi.Read<T2>();
                    }
                }
                catch { }
            }
            return Tuple.Create<IEnumerable<T1>, IEnumerable<T2>>(_item1, _item2);
        }

        /// <summary>
        /// 查詢一組SQL語句並返回值
        /// </summary>
        /// <typeparam name="T1">第一條語句返回集合類型</typeparam>
        /// <typeparam name="T2">第二條語句返回集合類型</typeparam>
        /// <typeparam name="T3">第三條語句返回集合類型</typeparam>
        /// <param name="sql">sql語句</param>
        /// <param name="param">參數化值</param>
        /// <returns></returns>
        public Tuple<IEnumerable<T1>, IEnumerable<T2>, IEnumerable<T3>> Query<T1, T2, T3>(string sql, object param)
        {
            IEnumerable<T1> _item1 = null; IEnumerable<T2> _item2 = null; IEnumerable<T3> _item3 = null;
            if (!string.IsNullOrEmpty(sql))
            {
                try
                {
                    using (var multi = DbConnection.QueryMultiple(sql, param))
                    {
                        _item1 = multi.Read<T1>();
                        _item2 = multi.Read<T2>();
                        _item3 = multi.Read<T3>();
                    }
                }
                catch { }
            }
            return Tuple.Create<IEnumerable<T1>, IEnumerable<T2>, IEnumerable<T3>>(_item1, _item2, _item3);
        }



        public void Dispose()
        {
            if (dbConnection != null)
            {
                try
                {
                    bool isClosed = dbConnection.State == ConnectionState.Closed;
                    if (!isClosed) dbConnection.Close();
                    //dbConnection.Dispose();
                }
                catch { }
            }
        }
    }
復制代碼

 

調用示例如下:

 

 

 

復制代碼
public abstract class BaseProvide
    {
        public Lazy<LiunianContext> lazyContext;

        protected LiunianContextDb
        {
            get
            {
                return lazyContext.Value;
            }
        }

    }

   public class EmployeeProvide : BaseProvide
    {
        /// <summary>
        /// 獲取數據
        /// </summary>
        /// <returns></returns>
        public List<Employee> ListEmployeeByParam(int[] param)
        {
            string sql = "select * from Employee where ID in @Ids";
            return Db.Query<Employee>(sql, new { Ids = param }).ToList();
        }

        /// <summary>
        /// 獲取全部數據
        /// </summary>
        /// <returns></returns>
        public List<Employee> ListEmployee()
        {
            string sql = "select * from Employee";
            return Db.Query<Employee>(sql,null).ToList();
        }

        /// <summary>
        /// 查詢單個實體
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public Employee loadEmployee(int Id)
        {
            string sql = "select * from Employee where ID= @Id";
            return Db.FirstOrDefault<Employee>(sql, new { Id = Id });
        }

        /// <summary>
        /// 插入操作
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool InsertEmployee(Employee model)
        {
            StringBuilder sql = new StringBuilder();
            sql.Append("insert into Employee values (@UpdateTime,@CreateTime,@State,@LoginName,@UserName,");
            sql.Append("@RoleId,@IsUse)");
            return Db.Execute(sql.ToString(), model);
        }

        /// <summary>
        /// 更新操作
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public bool UpdateEmployee(Employee model)
        {
            StringBuilder sql = new StringBuilder();
            sql.Append("update Employee set UpdateTime = @UpdateTime where  ID = @ID");
            return Db.Execute(sql.ToString(), model);
        }

        /// <summary>
        /// 刪除操作
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public bool DeleteEmployeeById(int Id)
        {
            string sql = "delete from Employee where ID = @Id";
            return Db.Execute(sql.ToString(), new { Id = Id });
        }

        /// <summary>
        /// 執行多個語句返回多個結果
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        public Tuple<int,IEnumerable<Employee>> ListGroupEmployee()
        {
            string sql = "select Count(*) from Employee select * from Employee";
            Tuple<IEnumerable<int>, IEnumerable<Employee>> queryGroup = Db.Query<int, Employee>(sql, null);
            return Tuple.Create<int, IEnumerable<Employee>>(queryGroup.Item1.FirstOrDefault(),queryGroup.Item2);
        }


    }
復制代碼

 

除了沒把事務加上之外其他的增刪改查都有了,同時在傳對象的時候Dapper也解決了sql注入的問題,在性能上也是比較好的ORM框架,需要的拿去!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM