如何配置mvc-mini-profiler以使用将连接字符串名称传递给基础的DbContext?

hal*_*gre 7 mvc-mini-profiler

我的DbContext ctor看起来像这样:

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

    /* stuff */
}
Run Code Online (Sandbox Code Playgroud)

我的mvc-mini-profiler bootstrapper看起来像这样:

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

如果我删除了我的DbContext ctor中的连接字符串,我会按预期进行分析.但我不想根据EF的惯例命名我的连接字符串.我需要更改什么才能使mvc-mini-profiler与我的DbContext一起使用?

dav*_*owl 6

您可以将ProfiledDbConnection显式传递给DbContext的ctor:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 使用最新版本的EF和MiniProfiler我必须这样做:public MyDbContext():base(GetProfiledConnection(),true){} private static DbConnection GetProfiledConnection(){var connectionString = ConfigurationManager.ConnectionStrings ["name"].ConnectionString; var connection = new SqlConnection(connectionString); 返回新的ProfiledDbConnection(连接,MiniProfiler.Current); } (4认同)
  • 起初这对我不起作用.我收到所有查询的错误"无效对象名称'dbo.EdmMetadata'".因为我正在使用迁移,所以没有EdmMetadata.为了解决这个问题,我不得不添加:modelBuilder.Conventions.Remove <IncludeMetadataConvention>(); 到我的OnModelCreating.我想我仍然会将此标记为答案.:P (3认同)