MiniProfiler с моделью EF "модель первая" edmx - программирование
Подтвердить что ты не робот

MiniProfiler с моделью EF "модель первая" edmx

Я пытаюсь заставить MiniProfiler профилировать доступ к базе данных, но у меня проблемы. Вся помощь, которую я вижу там, кажется, связана с "кодовыми" сущностями. Моя модель была разработана до того, как в этом году было доступно первое обновление кода, и я использовал конструктор для создания модели edmx. (Я использую это почти год и, похоже, работает для меня)

Пример на сайте документации MiniProfiler для меня не имеет смысла. Я пробовал несколько вариантов, но у меня проблемы.

Моя модель называется CYEntities, обычно для создания объекта ObjectContext. Я просто делаю это var context = new CYEntities() вот что я пробовал для профилировщика...

var dbConnection = new CYEntities().Connection;
var profiledConnection = ProfiledDbConnection.Get(dbConnection);
var context = profiledConnection.CreateObjectContext<CYEntities>(); // this is the context I'd finally use to access data. 

Это вызывает исключение...

System.ArgumentException: невозможно найти запрошенный поставщик данных .Net Framework. Он не может быть установлен.

Я не уверен, куда идти отсюда.

4b9b3361

Ответ 1

У меня такая же проблема. Похоже, что вы должны добавить следующее в свой файл web.config, однако для меня это приводит к сбою процесса w3wp.exe(и веб-сервера в визуальной студии для локальных запросов). Это не похоже на то, что происходит с кем-либо еще, поэтому оно может работать для вас (обязательно вставьте фактическую версию используемого профилировщика).

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

Ответ 2

Попробуйте вот так:

var connectionString = ConfigurationManager
    .ConnectionStrings["MyConnectionString"]
    .ConnectionString;
var ecsb = new EntityConnectionStringBuilder(connectionString);
var sqlConn = new SqlConnection(ecsb.ProviderConnectionString);
var pConn = ProfiledDbConnection.Get(sqlConn, MiniProfiler.Current);
var context = ObjectContextUtils.CreateObjectContext<CYEntities>(pConn);