如何读取Dapper生成的SQL查询?

时间:2013-01-14 12:39:28

标签: c# logging dapper

我有一个标准代码:

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自动将Dapper生成的查询保存到文件中?我正在考虑获取SQL查询源中显示的SQL查询源。

1 个答案:

答案 0 :(得分:5)

我设法使用MiniProfiler.

在ASP.Net MVC应用中完成了这项工作

首先,根据文档配置MiniProfiler。确保将SqlConnection包装在ProfiledDbConnection中。

请注意,您无需启用可视窗口小部件,只需确保在每个请求之前和之后启动配置文件。

接下来,在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命令,但如果要报告更多高级信息,模型中还会包含更多信息。