2011-08-08 9 views
7

Moja DbContext konstruktor wygląda następująco:Jak skonfigurować program mvc-mini-profiler do pracy z DbContext, który przekazuje nazwę ciągu połączenia do bazy?

public class FnordDbContext : DbContext 
{ 
    public FnordDbContext() : base("Fnord") 
    { 
    } 

    /* stuff */ 
} 

i mój MVC-mini-Profiler inicjującego wygląda następująco:

var sqlConnectionFactory = new SqlConnectionFactory(ConfigurationManager.ConnectionStrings["Fnord"].ConnectionString); 
var profiledConnectionFactory = new MvcMiniProfiler.Data.ProfiledDbConnectionFactory(sqlConnectionFactory); 
Database.DefaultConnectionFactory = profiledConnectionFactory; 

Jeśli usunąć ciąg połączenia w moim DbContext ctor, mam profilowanie jako spodziewany. Ale nie chcę nazywać łańcucha połączenia zgodnie z konwencją EF. Co muszę zmienić, aby program mvc-mini-profiler działał z moim użyciem DbContext?

Odpowiedz

6

można przekazać w sposób wyraźny o ProfiledDbConnection do ctor swojej DbContext:

public class MyDbContext : DbContext { 
    public MyDbContext() 
     : base(GetProfiledConnection()) { 
    } 

    private static DbConnection GetProfiledConnection() { 
     var connectionString = ConfigurationManager.ConnectionStrings["name"].ConnectionString; 
     var connection = new SqlConnection(connectionString); 
     return ProfiledDbConnection.Get(connection); 
    } 
} 
+3

Początkowo to nie działa dla mnie. Otrzymałem błąd "Niepoprawna nazwa obiektu" dbo.EdmMetadata "" dla wszystkich pytań. Ponieważ używam migracji, nie ma EdmMetadata. Aby to naprawić, musiałem dodać: modelBuilder.Conventions.Remove (); do mojego OnModelCreating. Sądzę, że nadal będę to oznaczać jako odpowiedź. : P –

+4

Korzystanie z najnowszych wersji EF i MiniProfiler musiałem zrobić to: public MyDbContext() : podstawa (GetProfiledConnection(), true) { } private static DbConnection GetProfiledConnection() { var connectionString = ConfigurationManager. ConnectionStrings ["name"]. ConnectionString; var connection = new SqlConnection (connectionString); return new ProfiledDbConnection (połączenie, MiniProfiler.Current); } –