15

Ho la versione 1.6 del riferimento MvcMiniProfiler (tramite Nuget) e ho impostato tutto come descritto nella homepage del progetto a http://code.google.com/p/mvc-mini-profiler/.MvcMiniProfiler su EF 4.1 Codice primo progetto non profilo SQL

ho il seguente codice nel web.config:

<system.data> 
    <DbProviderFactories> 
     <remove invariant="MvcMiniProfiler.Data.ProfiledDbProvider" /> 
     <add name="MvcMiniProfiler.Data.ProfiledDbProvider" invariant="MvcMiniProfiler.Data.ProfiledDbProvider" description="MvcMiniProfiler.Data.ProfiledDbProvider" type="MvcMiniProfiler.Data.ProfiledDbProviderFactory, MvcMiniProfiler, Version=1.6.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3" /> 
    </DbProviderFactories> 
</system.data> 

(La homepage del progetto ha Version = 1.5.0.0 - il pacchetto NuGet è stato poi aggiornato)

Ho il seguente codice nel Global.asax (e stringa di connessione anche definito nel web.config):

protected void Application_Start() 
    { 
     Log.Info("ReCoupon has started."); 

     AreaRegistration.RegisterAllAreas(); 

     RegisterGlobalFilters(GlobalFilters.Filters); 
     RegisterRoutes(RouteTable.Routes); 

     var factory = new SqlConnectionFactory(ConfigurationManager.ConnectionStrings["ReCouponContext"].ConnectionString); 
     var profiled = new MvcMiniProfiler.Data.ProfiledDbConnectionFactory(factory); 
     Database.DefaultConnectionFactory = profiled; 

     Database.SetInitializer(new ReCouponContextInitializer()); 
    } 

il profiler grandi opere se non che io non riesco a farlo al profilo SQL. Sto usando SQL Server 2008 Express. Ho seguito i problemi correlati nella home page del progetto Google Code e sono completamente bloccato.

+0

Hey @ Sam Zafferano, la la soluzione sotto funzionava - non la capisco del tutto. Posso darti accesso al mio repository bitbucket in modo che tu possa vederlo in azione se lo desideri ancora. – rkaregaran

+0

Dai un 1.9.1 a tiro. Finalmente ho il profilo SQL con EF ora dopo l'aggiornamento. – RyanW

risposta

7

Questo mi ha costretto per molto tempo. Sembra che la convenzione di denominazione delle stringhe di connessione abbia la precedenza su Database.DefaultConnectionFactory.

Provare a rinominare la stringa di connessione in web.config?

da

<connectionStrings> 
     <add name="ReCouponContext" connectionString="..." /> 
    </connectionStrings> 

a

<connectionStrings> 
     <add name="ReCoupon" connectionString="..." /> 
    </connectionStrings> 

e quindi modificare

var factory = new SqlConnectionFactory(ConfigurationManager.ConnectionStrings["ReCouponContext"].ConnectionString); 

a

var factory = new SqlConnectionFactory(ConfigurationManager.ConnectionStrings["ReCoupon"].ConnectionString); 
+0

OMG: ha funzionato come un fascino. Non sono sicuro di capire cosa intendi con la convenzione di denominazione che ha la precedenza? – rkaregaran

+0

Il codice EF cercherà automaticamente le stringhe di connessione identiche alla classe di contesto. Se non lo trova, verrà esaminato Database.DefaultConnectionFactory. Non sono proprio sicuro di cosa dovremmo fare se vogliamo profilare più di un database. –

+0

Ah, sì, sono un idiota, capito - mi chiedevo come funzionasse ancora il mio contesto - perché ora stiamo impostando la connessione db predefinita. Sì, non sono sicuro della cosa multi-db. – rkaregaran

Problemi correlati