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. Он не может быть установлен.
Я не уверен, куда идти отсюда.
Ответы
Ответ 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);