首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用代码优先和存储库模式时,MvcMiniProfiler不会显示数据库分析

在使用代码优先和存储库模式时,MvcMiniProfiler不会显示数据库分析
EN

Stack Overflow用户
提问于 2011-08-04 01:55:40
回答 2查看 578关注 0票数 1

我正在尝试使用我的ASP.NET MVC3应用程序设置数据库分析。我关注了我能找到的每一个关于这个的博客,结果是:

在web.config中:

代码语言:javascript
复制
<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>

在Global.asax中:

代码语言:javascript
复制
protected void Application_Start()
{
    Bootstrapper.Run();

    MiniProfiler.Settings.SqlFormatter = new SqlServerFormatter();

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

    Database.DefaultConnectionFactory = profiled;
}

protected void Application_BeginRequest()
{
    if (Request.IsLocal) { MiniProfiler.Start(); } 
}

protected void Application_EndRequest()
{
    MiniProfiler.Stop();
}

在控制器中:

代码语言:javascript
复制
public ActionResult About()
{
    var profiler = MiniProfiler.Current;

    using (profiler.Step("call database"))
    {
        ProjectResult result = projectService.Create("slug");

        return View();
    }
}

我正在使用存储库模式,并且我的EF Code first位于MVC应用程序引用的另一个项目中。

我的数据库类如下所示:

代码语言:javascript
复制
public class Database : DbContext
{
    public Database(string connection) : base(connection)
    {
    }

    public DbSet<Project> Projects { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Project>().Property(p => p.Slug).IsUnicode().IsRequired().IsVariableLength().HasMaxLength(64);
    }

    public virtual void Commit()
    {
        base.SaveChanges();
    }
}

我的数据库工厂看起来像这样:

代码语言:javascript
复制
public class DatabaseFactory : Disposable, IDatabaseFactory
{
    private readonly string connectionString;
    private Database database;

    public DatabaseFactory(string connectionString)
    {
        Check.Argument.IsNotNullOrEmpty(connectionString, "connectionString");

        this.connectionString = connectionString;
    }

    public Database Get()
    {
        return database ?? (database = new Database(connectionString));
    }

    protected override void DisposeCore()
    {
        if (database != null)
            database.Dispose();
    }
}

当我运行我的应用程序时,分析器根本不会显示任何数据库分析,只会显示控制器/视图的常规执行时间。

任何帮助都是非常感谢的。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-02 01:47:38

已通过安装Nuget MiniProfiler和MiniProfiler.EF包解决。在Global.asax中添加以下内容

代码语言:javascript
复制
protected void Application_Start()
{
    MiniProfilerEF.Initialize();
}

protected void Application_BeginRequest()
{
    if (Request.IsLocal)
    {
        MiniProfiler.Start();
    } 
}

protected void Application_EndRequest()
{
    MiniProfiler.Stop();
}

最后,将下面的代码添加到标记的JQuery下面的head to中。

代码语言:javascript
复制
@MvcMiniProfiler.MiniProfiler.RenderIncludes()

你准备好了。就像一种护身符。

票数 1
EN

Stack Overflow用户

发布于 2011-08-04 03:30:10

EF / Code First的注释指出,您的工厂和其他代码必须运行BEFORE任何EF内容,这导致我怀疑在Application_Start中安装此代码为时已晚。尝试创建预启动类,如下所示:

代码语言:javascript
复制
[assembly: WebActivator.PreApplicationStartMethod(typeof(MyApp.App_Start.AppStart_MiniProfiler), "Start")]

namespace MyApp.App_Start
{

    [INSERT using DECLARATIONS]

    public static class AppStart_MiniProfiler
    {
        public static void Start()
        {
            Bootstrapper.Run();

            MiniProfiler.Settings.SqlFormatter = new SqlServerFormatter();

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

            Database.DefaultConnectionFactory = profiled;
        }
    }
}

在您的项目中创建一个App_Start文件夹,并将该类放在App_Start文件夹中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6930929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档