4

我昨天在我的项目中设置了 MiniProfiler.MVC3 - 1.7 包。控制器和视图分析工作正常,但我真正感兴趣的是 SQL 分析。我无法让它发挥作用。我将 EF Code First 与 SQL 2008 数据库一起使用。

我已遵循这篇文章中的所有建议..

mvcminiprofiler-on-ef-4-1-code-first-project-doesnt-profile-sql

在 miniprofiler.cs 中,我的 SQL 连接设置为...

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

我的 Web.config 数据库连接是...

 <add name="CMDBMVC3" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI; AttachDBFilename=|DataDirectory|CMDB_MVC3.mdf;Initial Catalog=CMDB_MVC3;Trusted_Connection=True;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />

如果我在 mini-profiler 行上放置一个断点,它将指向正确的数据库连接。我不确定此时还能做什么。我将不胜感激有关如何使 SQL 分析工作的任何指导。

4

1 回答 1

0

我首先使用 EF 代码,并在我的 Context 构造函数中使用迷你分析器创建一个新的连接工厂并将其传递给 ProfiledDbConnectionFactory 方法,这将返回一个分析连接,然后您可以将其设置为上下文的 DefaultConnectionFactory。

public MyConext()
{
    var factory = new ConnectionFactory(); 
    var profiled = new MvcMiniProfiler.Data.ProfiledDbConnectionFactory(factory);
    Database.DefaultConnectionFactory = profiled;
}

连接Facotry 只是返回一个新的sql 连接

public class ConnectionFactory :IDbConnectionFactory
{
     public DbConnection CreateConnection()
     {
         var cnn = new System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings["SomeConnection"].ToString());

             return cnn;            
    }

您还需要将 ProfiledDBProvider 添加到 Web 配置文件中。确保版本号适合您。

<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.7.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3" />
    </DbProviderFactories>
  </system.data>

这在使用 Miniprofiler nuget 包的 MVC 和 asp.net 网络表单中对我来说都很好。我还将查看作为全局操作过滤器的一部分自动配置分析的 nuget 包的新 MVC 版本。

于 2011-08-12T08:35:16.690 回答