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

我有一个标准代码:

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查询源。

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