Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using mvc-mini-profiler

I'm trying to use the mvc-mini-profiler with EFCodeFirst I'm creating a DbProfiledConnection and passing it to the DbContext on construction as below. The application continues to work as expected by the sql is not exposed to the Profiler.

public class WebContext : DbContext
{
    static DbConnection _connection = new SqlConnection(ConfigurationManager.ConnectionStrings["WebContext"].ConnectionString);
    static DbConnection _profiledConnection = MvcMiniProfiler.Data.ProfiledDbConnection.Get(_connection);        

    public WebContext()
            : base(_profiledConnection, true)
    {   

    }

oops my bad.

I've modified it so that when my WebContext is constructed in my UnitOfWork i pass in a ProfiledDbConnection

public UnitOfWork()
{             
    var profiledConnection = MvcMiniProfiler.Data.ProfiledDbConnection.Get(connection);
    this.context = new MyContext(profiledConnection);
}

I've checked and MiniProfier Current has been set in Application_BeginRequest and it returns a ProfiledDbConnection when I then try and query the database an error is thrown in the ProfiledDbProviderServices class.

 protected override string GetDbProviderManifestToken(DbConnection connection)
 {
     return tail.GetProviderManifestToken(connection);
 }

this method returns a "The provider did not return a ProviderManifestToken string." error

like image 867
Richard Forrest Avatar asked Jun 09 '11 11:06

Richard Forrest


People also ask

What is Mini profiler?

MiniProfiler is a library and UI for profiling your application. By letting you see where your time is spent, which queries are run, and any other custom timings you want to add, MiniProfiler helps you debug issues and optimize performance.

How to use MiniProfiler in ASP net?

Persisting profiling dataAdd the reference “MiniProfiler. Providers. SQLServer” package and add following code in AddMiniProfiler method. Miniprofiler database will not be autogenerated so you need to create using script before running the application.

What is MiniProfiler .NET core?

MiniProfiler is a library and UI for profiling your application. MiniProfiler helps you to measure perfomance of your applications. With Entity Framework extension you will be able to measure query performance.” First you need to install the MiniProfiler package and MiniProfiler Entity Framework package.


1 Answers

I suspect this relates to the static field initializer. Connections on web apps should never be static anyway (but request-specific at most).

The key is: what does ProfiledDbConnection actually come out as? The Get method returns a ProfiledDbConnection only if you are currently profiling (on the current request), and the connection is profiled against the MiniProfiler instance on that request.

If you use a static field, then there are two scenarios:

  • the static field is initialized without a request context (or a non-developer request context): no profiling will occur as MiniProfiler.Current is null
  • the static field is initialized, but everything is logged against the very first request, which is quickly dead
like image 189
Marc Gravell Avatar answered Oct 19 '22 16:10

Marc Gravell