我有一个标准代码:
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查询源中显示的SQL查询源。
答案 0 :(得分:5)
我设法使用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命令,但如果要报告更多高级信息,模型中还会包含更多信息。