Обновление мини-профилировщика с 1.7 до 1.9 нарушает существующий код - PullRequest
9 голосов
/ 31 августа 2011

У меня есть проект asp.net, который использует mvc-mini-profiler.Я использовал версию 1.7 пакета NuGet и заметил, что есть обновленный пакет, версия которого 1.9.Я обновил пакет, и теперь мой код больше не компилируется.Код, который не может быть скомпилирован:

public static T GetProfiledContext<T>() where T : System.Data.Objects.ObjectContext
{
    var conn = GetStoreConnection<T>();
    if (_enableProfiling)
    {
        conn = ProfiledDbConnection.Get(conn);
    }
    return ObjectContextUtils.CreateObjectContext<T>(conn);
}

Ошибки компиляции сообщают о следующих проблемах:

  • «MvcMiniProfiler.Data.ProfiledDbConnection» не содержит определения «Get».
  • Имя 'ObjectContextUtils' не существует в текущем контексте.

Я заметил, что могу создать экземпляр ProfiledDbConnection и передать ему соединение и объект типа IDbProfiler., но я не уверен, как мне получить этот объект.

Относительно ObjectContextUtils, я понятия не имею, что я должен использовать.

Как я могу исправить эти проблемы?


Обновление:

Следуя рекомендациям @ monkeychatter, мне удалось создать код.Теперь я получаю следующее исключение времени выполнения:

После вызова метода get_ProviderFactory для экземпляра поставщика хранилища типа «MvcMiniProfiler.Data.ProfiledDbConnection» был возвращен нуль.Поставщик магазина может работать неправильно.

Изучив ProfiledDbConnection в ILSpy, я заметил, что он больше не переопределяет DbProviderFactory.Это кажется причиной ошибки, так как базовая реализация возвращает ноль.Кто-нибудь смог обойти эту проблему?

1 Ответ

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

Я только что прошел то же самое, и, к сожалению, большинство / вся документация показывает «старый» способ.Большая часть этой функциональности была перенесена в сам класс ProfiledDbConnection.Чтобы получить расширение ObjectContext в ProfiledDbConnection, вам также необходимо сослаться на сборку из пакета nuget ' MiniProfiler.EF '.Ниже приведены правки для получения эквивалентного кода в 1.9.

//reference extension from MvcMiniProfiler.Data
using MvcMiniProfiler.Data;

var conn = GetStoreConnection<T>();   
if (_enableProfiling)   
{   
    //conn = ProfiledDbConnection.Get(conn);   
    conn = new ProfiledDbConnection(conn, MiniProfiler.Current);
}   
//return ObjectContextUtils.CreateObjectContext<T>(conn);
return conn.CreateObjectContext<T>();

Обновление: Для вашего обновленного вопроса я бы заменил строку в моем предыдущем решении, как показано ниже.Сюда входит переопределение для устранения проблемы ProviderFactory:

    //conn = new ProfiledDbConnection(conn, MiniProfiler.Current);
    conn = new EFProfiledDbConnection(conn, MiniProfiler.Current);
...