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

C# 如何读取Dapper生成的SQL查询?,c#,logging,dapper,C#,Logging,Dapper,我有一个标准代码: public IEnumerable ExperimentSelect(object parameters) { using (var connection = new SqlConnection(ConnectionString)) { connection.Open(); var dynamicparam = new DynamicParameters(parameters); var rows = con

我有一个标准代码:

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 Server Profiler中所示的SQL查询源。

我在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命令,但是如果您想报告更高级的信息,模型中会包含更多的信息。

如果Dapper有一个SQLMapper.GridReader的扩展,可以转储生成的SQL,那就太好了。它是开源的,所以你也可以自己调整它。我刚试过,GitHub项目甚至没有在我的开发机器上编译欢迎来到开源世界。