Как прочитать SQL-запрос, сгенерированный 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;
    }
}

Как автоматизировать сохранение запросов, сгенерированных Dapper, в файл с помощью, например, NLog? Я думаю о получении источника SQL-запроса, как показано в SQL Server Profiler.

1 ответ

Мне удалось сделать эту работу в приложении ASP.Net MVC, используя MiniProfiler.

Сначала настройте 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, но в модель включено гораздо больше информации, если вы хотите сообщить более подробную информацию.

Другие вопросы по тегам