Mvc-Mini-Profiler v1.7 в проекте EF 4.1 Code-First не профилирует SQL - PullRequest
4 голосов
/ 31 июля 2011

Вчера я установил пакет 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" />

Если я поставлю точку останова на линии мини-профилировщика, она будет указывать на правильное соединение дБ.Я не уверен, что еще делать на этом этапе.Буду признателен за любые указания о том, как заставить работать профилирование SQL.

1 Ответ

0 голосов
/ 12 августа 2011

Сначала я использую код EF и мини-профилировщик в конструкторе контекста. Я создаю новую фабрику соединений и передаю ее методу 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 в файл веб-конфигурации. Убедитесь, что номер версии правильный для вас.

<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>

Это прекрасно работает для меня как в веб-формах MVC, так и в asp.net, используя пакет nuget Miniprofiler. Я также ознакомился бы с новой версией пакета nuget для MVC, которая автоматически настраивает профилирование как часть глобального фильтра действий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...