Dapepr講解
上篇文章我們介紹了,什么是Dapepr,有什么好處,性能的對比,還有多表多數據添加操作(事務的封裝)等等。本篇文章我們繼續講解。。。。。如果本篇文章看不懂,請看我上一篇文章:Dapeper的入門
Select查詢
1、首先我們先在SQLMapper中QueryMultiple()方法,在梳理Dapper中無意中發現,個人感覺不錯,
// // 摘要: // Execute a command that returns multiple result sets, and access each in turn:
// 上句話的翻譯是: 執行一個返回多個結果集的命令,並依次訪問每個結果集
public static SqlMapper.GridReader QueryMultiple(this IDbConnection cnn, CommandDefinition command); // // 摘要: // Execute a command that returns multiple result sets, and access each in turn public static SqlMapper.GridReader QueryMultiple(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null,
int? commandTimeout = null, CommandType? commandType = null); // // 摘要: // Execute a command that returns multiple result sets, and access each in turn public static Task<SqlMapper.GridReader> QueryMultipleAsync(this IDbConnection cnn, CommandDefinition command); // // 摘要: // Execute a command that returns multiple result sets, and access each in turn public static Task<SqlMapper.GridReader> QueryMultipleAsync(this IDbConnection cnn, string sql, object param = null,
IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null);
2、老規矩我們在DapperDBContext 中加個方法,我們可以根據不同業務擴展方法,
/// <summary> /// WueryMultiplie 執行一個返回多個結果集的命令,並依次訪問每個結果集 /// </summary> /// <param name="sql"></param> /// <param name="param"></param> /// <param name="transaction"></param> /// <param name="commandTimeout"></param> /// <param name="commandType"></param> /// <param name="databaseOption"></param> /// <returns></returns> public static Dapper.SqlMapper.GridReader QueryMultiple(string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null,
CommandType? commandType = null, int databaseOption = 1) { var conn = ConnectionFactory.MySqlConnection(); var sw = new Stopwatch(); sw.Start(); try { // 因為using 的作用域之后,連接自動關閉, //這里需要說明的是,在數據讀取完畢之后,不再需要SqlDataReader時,必須將其進行手動關閉 var restult = conn.QueryMultiple(sql, param, transaction, commandTimeout, commandType); sw.Stop(); return restult; } catch (Exception ex) { LogHelper.ErrorLog(ex.ToString()); throw new Exception(ex.ToString()); } }
注意事項:不知道你在上面代碼中有沒有遇到一個問題,上篇文章我們封裝用到using,這次沒有用到,是因為封裝過程報錯:報錯:“閱讀器關閉時嘗試調用 Read 無效” ,原因也很簡單:因為using 的作用域之后,連接自動關閉,這里需要說明的是,在數據讀取完畢或者不再需要SqlDataReader時,必須將其進行手動關閉。
3、SQL調用
/// <summary> /// 單表查數據 /// </summary> /// <returns></returns> public List<Department> select() { string sql = @"select *from Department"; var list = DapperDBContext.Query<Department>(sql, null).ToList();
//(多個結果集)為了比較就寫一起 var all = selectAll(); var dep = all.Read<Department>().ToList(); var auth = all.Read<AuthResources>().ToList(); return list; } /// <summary> /// 多個結果集 /// </summary> /// <returns></returns> public Dapper.SqlMapper.GridReader selectAll() { var sql = "select * from Department; select * from AuthResources"; var multiReader = DapperDBContext.QueryMultiple(sql); return multiReader; }
效果:
- 博主是利用讀書、參考、引用、復制和粘貼等多種方式打造成自己的純鍍 24k 文章,請原諒博主成為一個無恥的文檔搬運工!
- 小弟剛邁入博客編寫,文中如有不對,歡迎板磚扶正,希望對你有所幫助。