2013-01-14 51 views
12

我有一個標準代碼:如何讀取由Dapper生成的SQL查詢?

public IEnumerable ExperimentSelect(object parameters) 
{ 
    using (var connection = new SqlConnection(ConnectionString)) 
    { 
     connection.Open(); 
     var dynamicparam = new DynamicParameters(parameters); 

     var rows = connection.Query("[dbo].[ptbSapOrderSelect]", dynamicparam, 
       commandType: CommandType.StoredProcedure); 

     if (rows.Any()) 
      TotalRows = ((long)rows.ToList()[0].TotalRows); 

     return rows; 
    } 
} 

如何通過自動生成的小巧玲瓏使用例如NLOG文件保存查詢?我正在考慮如SQL Server Profiler中所示獲取SQL查詢的來源。

+0

如果Dapper對SQLMapper.GridReader進行了擴展,將會轉儲出生成的SQL,那將會很棒。它是開源的,所以你也可以自己調整它。我剛剛嘗試過,並且GitHub項目甚至沒有在我的開發機器上編譯。 :)歡迎來到開源世界。 – Pompair

回答

5

我設法用MiniProfiler.

首先要在一個ASP.Net MVC應用程序這項工作,配置MiniProfiler按照該文檔。確保你在一個ProfiledDbConnection中包裝你的SqlConnection。

請注意,您無需啓用可視化窗口小部件即可工作,只需確保配置文件在每個請求之前啓動並結束。

接下來,若該請求的個人資料被停止的global.asax.cs,如下修改它:

protected void Application_EndRequest() 
{ 
    // not production code! 
    MiniProfiler.Stop(); 

    var logger = NLog.LogManager.GetCurrentClassLogger(); 

    var instance = MiniProfiler.Current; 

    if (instance == null) return; 

    var t = instance.GetSqlTimings(); 

    foreach (var sqlTiming in t) 
    { 
     logger.Debug(sqlTiming.CommandString); 
    } 
} 

字面上轉儲執行的SQL命令,但包括在很多的更多信息該模型如果您想報告更多高級信息。