Comment lire une requête SQL générée par Dapper?

c# dapper logging

Question

J'ai un code standard:

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

Comment automatiser l'enregistrement des requêtes générées par Dapper dans le fichier en utilisant par exemple NLog? Je pense à obtenir la source de la requête SQL comme indiqué dans le SQL Server Profiler.

Réponse populaire

J'ai réussi à faire cela dans une application ASP.Net MVC en utilisant MiniProfiler.

Tout d'abord, configurez MiniProfiler selon les documents. Assurez-vous que vous encapsulez votre SqlConnection dans une ProfiledDbConnection.

Notez que vous n'avez pas besoin d'activer le widget visuel pour que cela fonctionne, assurez-vous simplement qu'un profil est démarré avant et se termine après chaque requête.

Ensuite, dans global.asax.cs où le profil de cette requête est arrêté, modifiez-le comme suit:

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

Cela décharge littéralement la commande SQL, mais le modèle contient beaucoup plus d'informations si vous souhaitez signaler des informations plus avancées.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi