當前位置:編程學習大全網 - 源碼下載 - 關於MVC+dapper 記錄SQL日誌的問題

關於MVC+dapper 記錄SQL日誌的問題

可以參考dapper源碼,或者反編譯壹下dapper.dll,在dapper之上再封裝壹層拓展方法,正好最近我也在做這個,下面代碼可以參考壹下:

using?Dapper;

//封裝的拓展類

public?static?class?DapperExtension

{

public?static?int?CExecute(this?IDbConnection?cnn,?string?sql,?object?param?=?null,?IDbTransaction?transaction?=?null,?int?commandTimeout?=?null,?CommandType?commandType?=?null)

{

var?beginTime?=?DateTime.Now;

return?SqlMapper.Execute(cnn,?sql,?param,?transaction,?commandTimeout,?commandType).ToLog(sql,param,?beginTime);

}

public?static?int?CExecute(this?IDbConnection?cnn,?CommandDefinition?command)

{

var?beginTime?=?DateTime.Now;

return?SqlMapper.Execute(cnn,?command).ToLog(command.CommandText,command.Parameters,beginTime);

}

……

}

//日誌記錄拓展方法

private?static?T?ToLog<T>(this?T?result,?string?sql,?object?param,?DateTime?beginTime,?IDbConnection?conn?=null)

{

//日誌記錄要異步進行,防止日誌記錄時報錯,影響業務流程

Task.Run(()=>?{

var?now?=?DateTime.Now;

var?log?=?new?LogModel()

{

CreateTime?=?now,

SqlStr?=?sql,

ExcuteResult?=?result.ToJsonString(),

Timespan?=?(now?-?beginTime).TotalMilliseconds

};

if?(param?!=?null)

{

foreach?(var?p?in?param.GetType().GetProperties())

{

log.SqlStr=log.SqlStr.Replace("@"+p.Name,p.GetValue(param).ToString());

}

}

//日誌記錄到MongoDB中

MongoDbHelper.SetCollection(log,?"Log_"+?now.ToString("yyyyMMdd"),?"ExcuteLog");

});

return?result;

}//調用示例:

public?int?GetInfo(string?sql,?object?param?=?null)

{

var?connStr="....";//數據庫連接字符串

using?(var?conn?=?new?MySqlConnection(connStr))

{

var?result?=?conn.CExecute(sql,?param);

return?result;

}

}

  • 上一篇:求最優路徑的算法
  • 下一篇:三種最好的衛生紙
  • copyright 2024編程學習大全網