Сегодня я вернулся к проекту, с которым я не работал в течение последнего месяца или около того. Я настроил этот проект, используя MiniProfiler 1.7, и все было хорошо в мире. Он также профилировал мои вызовы БД и производительность просмотра.
Я решил обновить до 1.9, и я столкнулся с несколькими скачками скорости. Сейчас я проработал большинство вопросов на данный момент. Единственное, что кажется «неправильным» - это профилирование БД. Я получаю желтый экран смерти со следующей ошибкой:
A null was returned after calling the 'get_ProviderFactory' method on a store
provider instance of type 'MvcMiniProfiler.Data.ProfiledDbConnection'.
The store provider might not be functioning correctly.
Для справки, я покажу вам, как у меня была установка минипрофиля в 1.7 с MVC3 и EF 4.1 Code First.
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.7.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3" />
</DbProviderFactories>
Global.asax обработал большинство всего оттуда. Я перечислю соответствующий код Application_Start (), который работал раньше, а сейчас нет.
#region MVC Mini Profiler related database profiling config/setup
//This line makes SQL Formatting smarter so you can copy/paste
// from the profiler directly into Query Analyzer
MiniProfiler.Settings.SqlFormatter = new SqlServerFormatter();
var factory = new SqlConnectionFactory(ConfigurationManager.ConnectionStrings["Database"].ConnectionString);
var profiled = new ProfiledDbConnectionFactory(factory);
Database.DefaultConnectionFactory = profiled;
#endregion
Последний шаг в моем контексте связан с профилированным соединением:
public class Database : DbContext
{
public Database()
: base(GetProfilerConnection(), true)
{}
private static DbConnection GetProfilerConnection()
{
return
ProfiledDbConnection.Get(
new SqlConnection(ConfigurationManager.ConnectionStrings["Database"].ConnectionString));
}
}
Перенесемся в будущее, и я переделал некоторые вещи, чтобы использовать пакет мини-профилей MVC3 minprofiler и пакет NuFet мини-профилей EF, но я заблудился о том, как заставить профилирование БД работать снова.
Я изменил свой web.config так, чтобы показалось тем, что требовалось, но ReSharper сначала не рад.
<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.EntityFramework, Version=1.9.1.0, Culture=neutral, PublicKeyToken=b44f9351044011a3" />
</DbProviderFactories>
Не совсем уверен, что мне здесь не хватает. Нужно ли мне это больше с вызовом MiniProfilerEF.Initialize () ;? Некоторые документы и предложения, кажется, указывают на то, что вам это больше не нужно.
Большая проблема заключается в том, как настроить профилирование БД в 1.9.
Соответствующий код, который у меня был ранее в Global.asax, теперь перемещен в MiniProfiler.cs в папке App_Start. Я полагал, что установка была бы такой же, но это не так.
Я хочу сделать это (возможно, потому что это то, с чем я знаком в 1.7)
//TODO: To profile a standard DbConnection:
var factory = new SqlConnectionFactory(ConfigurationManager.ConnectionStrings["Database"].ConnectionString);
var profiled = new ProfiledDbConnectionFactory(factory);
Database.DefaultConnectionFactory = profiled;
Кажется, это больше не работает. Я также отметил, что, похоже, мне следует использовать EFProfiledDbConnection вместо просто ProfiledDbConnection? Это правильно?
Как мне настроить профилирование БД с этой моделью? Я копаю все выше и ниже в документации, но так много информации со старым способом смешано с новым, и мне трудно отделить то, что сегодня является «правильным» способом.