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

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

最佳答案

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

关于c# - 如何读取 Dapper 生成的 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14318571/

相关文章:

c# - Entity Framework 代码首先使用导航属性一个Key

c# - 通用 linq 排序方法 - 解析表达式

java - log4j 属性文件 : how to configure?

varchar - Dapper 和 varchars

c# - 取消长时间运行的 Dapper 查询

json - 使用 Dapper ORM (.NET Core) 将 JSON 插入 PostgreSQL 数据库

c# - MySQL - 架构无效且未为 .....(等)的实例指定映射

c# - 为什么 Fiddler 的 Http 请求非常快

python - 在python中使用多个进程记录到一个文件

java - 毕竟 log4j 不是线程安全的吗?