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