Search code examples
mvc-mini-profilerdapper

Dapper with MVCMiniProfiler


I am wanting to use the MVCMiniProfiler with Dapper. Is this possible beyond wrapping the "Query" call from dapper in "Using Profiler.Step" block?

I have this basic Dapper call:

Dim comments As List(Of Comment)
Using conn = New SqlConnection(ConnectionString)
conn.Open()
comments = conn.Query(Of Comment)("SELECT * from comments where userid = @userid",       New With {.userid= 1})
End Using

The MiniProfiler examples show this

Private Shared _sqlConnection As SqlConnection
Public Shared Function GetOpenConnection() As DbConnection
    If _sqlConnection Is Nothing Then
            _sqlConnection = New SqlConnection("connection string")
    End If
    ' wrap the connection with a profiling connection that tracks timings 
    Return MvcMiniProfiler.Data.ProfiledDbConnection.[Get](_sqlConnection, MiniProfiler.Current)
End Function

Where I am stuck is in the implementation of the "Get" on the ProfiledDbConnection. Is it possible to use ProfiledDbConnection while using Dapper?


Solution

  • Good catch, the documentation is out of date, just updated it:

    Use something like:

    return MiniProfiler.Current != null ? 
            new MvcMiniProfiler.Data.ProfiledDbConnection(cnn, MiniProfiler.Current) : 
            cnn;
    

    I killed the factory cause I wanted people to be able to inherit off ProfiledDbConnection and statics can not be virtualized.