Подтвердить что ты не робот

Как читать 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.

4b9b3361

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