¿Cómo leer una consulta SQL generada por Dapper?

c# dapper logging

Pregunta

Tengo un código estándar:

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;
    }
}

¿Cómo automatizar las consultas de guardado generadas por Dapper en el archivo utilizando, por ejemplo, NLog? Estoy pensando en obtener una fuente de consulta SQL como se muestra en el Analizador de SQL Server.

Respuesta popular

Pude hacer que esto funcionara en una aplicación ASP.Net MVC usando MiniProfiler.

Primero, configure MiniProfiler según los documentos. Asegúrese de que está envolviendo su SqlConnection dentro de una conexión ProfiledDbConnection.

Tenga en cuenta que no necesita habilitar el widget visual para que esto funcione, solo asegúrese de que un perfil se inicie antes y finalice después de cada solicitud.

A continuación, en global.asax.cs donde se detiene el perfil para esa solicitud, modifíquelo de la siguiente manera:

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);
    }
}

Esto literalmente vacía el comando SQL ejecutado, pero hay mucha más información incluida en el modelo si desea reportar información más avanzada.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué