15

У меня есть версия 1.6 MvcMiniProfiler, на которую ссылается (через Nuget), и настроил все, как описано на главной странице проекта, по адресу http://code.google.com/p/mvc-mini-profiler/.MvcMiniProfiler on EF 4.1 Проект Code-First не является профилем SQL

У меня есть следующий код в Web.config:

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

(На домашней странице проекта есть Version = 1.5.0.0 - пакет NuGet с тех пор был обновлен)

У меня есть следующий код в Global.asax (и строки подключения также определено в Web.config):

protected void Application_Start() 
    { 
     Log.Info("ReCoupon has started."); 

     AreaRegistration.RegisterAllAreas(); 

     RegisterGlobalFilters(GlobalFilters.Filters); 
     RegisterRoutes(RouteTable.Routes); 

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

     Database.SetInitializer(new ReCouponContextInitializer()); 
    } 

профилировщик отлично работает за исключением того, что я не могу получить его профиль SQL. Я использую SQL Server 2008 Express. Я слежу за связанными проблемами на главной странице проекта Google Code и полностью застрял.

+0

Эй @ Сэм Шафран, в решение ниже работало - я не совсем понимаю. Я могу предоставить вам доступ к моему реплику битбакет, чтобы вы могли видеть его в действии, если хотите. – rkaregaran

+0

Сделайте снимок 1.9.1. Наконец, после обновления я получил SQL-профилирование с EF. – RyanW

ответ

7

Этого я тоже долго стоял в тупике. Похоже, что соглашение об именах строк соединения имеет приоритет над Database.DefaultConnectionFactory.

Не могли бы вы переименовать строку соединения в web.config?

из

<connectionStrings> 
     <add name="ReCouponContext" connectionString="..." /> 
    </connectionStrings> 

в

<connectionStrings> 
     <add name="ReCoupon" connectionString="..." /> 
    </connectionStrings> 

, а затем изменить

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

в

var factory = new SqlConnectionFactory(ConfigurationManager.ConnectionStrings["ReCoupon"].ConnectionString); 
+0

OMG - он работал как шарм. Я не уверен, что понимаю, что вы имеете в виду, когда соглашение об именах имеет приоритет? – rkaregaran

+0

EF-код сначала автоматически будет искать строки соединений, имена которых совпадают с вашим классом контекста. Если он не найдет его, он будет искать Database.DefaultConnectionFactory. Я не совсем уверен, что мы должны делать, если хотим создать более чем одну базу данных. –

+0

Ах, да, я идиот, понял - мне было интересно, как мой контекст все еще работает, потому что теперь мы устанавливаем соединение по умолчанию db. Да, я тоже не уверен в мульти-дБ. – rkaregaran