Dapper系列之二:Dapper的事務查詢

Dapepr講解

 上篇文章咱們介紹了,什麼是Dapepr,有什麼好處,性能的對比,還有多表多數據添加操做(事務的封裝)等等。本篇文章咱們繼續講解。。。。。若是本篇文章看不懂,請看我上一篇文章:Dapeper的入門

Select查詢

一、首先咱們先在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);

二、老規矩咱們在DapperDBContext 中加個方法,咱們能夠根據不一樣業務擴展方法,sql

 
        /// <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時,必須將其進行手動關閉。app

三、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 文章,請原諒博主成爲一個無恥的文檔搬運工!
  • 小弟剛邁入博客編寫,文中若有不對,歡迎板磚扶正,但願對你有所幫助。
相關文章
相關標籤/搜索