MVC MiniProfiler с Entity Framework 5 Model First Error: невозможно определить имя поставщика

Используя Entity Framework 5, MiniProfiler 2. Nuget установлен для MiniProfiler.EF.

Создание подключения следующим образом

var conn = new EFProfiledDbConnection(DbConnections.GetSqlConnection(),                                                                      MiniProfiler.Current);
return new MyDbContext(conn, true);

При попытке получить данные с помощью DbContext возвращается следующая ошибка:

Unable to determine the provider name for connection of type     
'StackExchange.Profiling.Data.EFProfiledDbConnection'.`

Я пробовал добавить в web.config следующее:

<system.data>
  <DbProviderFactories>
    <remove invariant="StackExchange.Profiling.Data.ProfiledDbProviderFactory" />
    <add name="StackExchange.Profiling.Data.ProfiledDbProviderFactory" 
         invariant="StackExchange.Profiling.Data.ProfiledDbProviderFactory" 
         description="StackExchange.Profiling.Data.ProfiledDbProviderFactory"
         type="StackExchange.Profiling.Data.ProfiledDbProviderFactory, MiniProfiler, Version=2.0.2.0, Culture=neutral, PublicKeyToken=b44f9351044011a3" />
  </DbProviderFactories>
</system.data>

Это не помогает. Я также пробовал варианты этого, используя различные EFProviderFactories в MiniProfiler.EntityFramework, но не смог заставить ни один из них работать.

Если я попытаюсь запустить MiniProfilerEF.Initialize(); в App_Start, то при попытке доступа к БД я получаю следующую ошибку:

Код, созданный с использованием шаблонов T4 для разработки сначала базы данных и сначала модели, может работать некорректно при использовании в режиме «Сначала код». Чтобы продолжить использование Database First или Model First, убедитесь, что строка подключения Entity Framework указана в файле конфигурации исполняемого приложения. Чтобы использовать эти классы, созданные из Database First или Model First, с Code First добавьте любую дополнительную конфигурацию с помощью атрибутов или DbModelBuilder API, а затем удалите код, который вызывает это исключение.

Удаление раздела DbProviderFactories из web.config и запуск MiniProfilerEF.Initialize_EF42(); в App_Start приводит к исходной ошибке.

Поскольку на странице MiniProfiler говорится, что MiniProfilerEF.Initialize() в первую очередь предназначен только для кода, похоже, что это не лучший вариант.

Другой поиск не дал мне ничего другого, кроме добавления в раздел в Web.Config. Есть рекомендации, как действовать? Цель состоит в том, чтобы иметь возможность использовать Model First DbContext, профилированный Mvc MiniProfiler.


person Yaakov Ellis    schedule 19.12.2012    source источник
comment
Вы уверены, что он поддерживает EF5? community.miniprofiler.com/permalinks/ 99 /   -  person MisterIsaak    schedule 20.12.2012
comment
@ABerezovskiy нет, это решение не работает - функция ProfiledDbConnection.CreateObjectContext<T>() ожидает, что T будет иметь тип ObjectContext, тогда как в моем случае он имеет тип DbContext. Так что он не компилируется.   -  person Yaakov Ellis    schedule 27.01.2013
comment
@YaakovEllis ((IObjectContextAdapter)yourDbContextInstance).ObjectContext Lerman J. - Programming Entity Framework: DbContext, стр.204, 2012 г.   -  person berezovskyi    schedule 27.01.2013
comment
@ABerezovskiy У меня еще нет DbContextInstance для использования таким образом - я пытаюсь создать и вернуть DbContextInstance с помощью ProfiledDbConnection для интеграции с MiniProfiler   -  person Yaakov Ellis    schedule 27.01.2013
comment
Удачи в этом? Потратил столько времени, пытаясь разобраться в этой проблеме. Помощь будет очень признательна !!!   -  person TYRONEMICHAEL    schedule 17.02.2013


Ответы (1)


Ваш global.asax выглядит так?

public class MvcApplication : HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();
        AutomapperConfig.RegisterMappings();

        MiniProfiler.Settings.SqlFormatter = new StackExchange.Profiling.SqlFormatters.SqlServerFormatter();
        MiniProfilerEF.Initialize();
    }

    protected void Application_BeginRequest()
    {
        if (Request.IsLocal)
        {
            MiniProfiler.Start();
        }
    }

    protected void Application_EndRequest(object sender, EventArgs e)
    {
        MiniProfiler.Stop(false);
    }
}

Я создаю свой контекст обычным способом:

var _database = new DinoContext(_connectionString);
person amhed    schedule 08.03.2013
comment
Спасибо, у меня была такая же ошибка, и просто отсутствовал оператор MiniProfilerEF.Initialize();. - person mono68; 17.10.2013