輕量型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框架,需要的拿去!