2011-08-08 17 views
7

Benim DbContext ctor şöyle:Mvc-mini-profiler'ı, bağlantı dizesi adını tabana aktaran bir DbContext ile çalışacak şekilde nasıl yapılandırabilirim?

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

    /* stuff */ 
} 

Ve mvc-mini-profiler bootstrapper şöyle görünüyor:

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

DbContext ctorumdaki bağlantı dizgisini kaldırırsam profillemeyi beklendiği gibi alırım . Ancak bağlantı dizgimi EF'in sözleşmesine göre adlandırmak zorunda kalmak istemiyorum. Mvc-mini-profiler'i DbContext kullanımım ile değiştirmek için ne yapmam gerekiyor?

cevap

6

Sen DBContext ait ctor açıkça ProfiledDbConnection içinde geçirebilirsiniz:

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

İlk başta bu benim için işe yaramadı. Tüm sıralar için "Geçersiz nesne adı 'dbo.EdmMetadata'" hatasını alıyorum. Göç kullanıyorum çünkü EdmMetadata yok. Bunu düzeltmek için şunları eklemeliydim: modelBuilder.Conventions.Remove (); OnModelCreating'e. Sanırım bunu bir cevap olarak işaretleyeceğim. : P –

+4

Bunu yapmak zorunda EF ve MiniProfiler son sürümlerini kullanarak: Kamu MyDbContext() : Baz (GetProfiledConnection(), true) { } özel statik DbConnection GetProfiledConnection() { var connectionString = ConfigurationManager. . connectionStrings [ "ad"] ConnectionString; var connection = new SqlConnection (connectionString); yeni ProfiledDbConnection (bağlantı, MiniProfiler.Current) döndürür; } –

İlgili konular