Как мне заставить работать работать с EntityFramework?


Вопрос

ОБЗОР
Используя Fitnesse с EF6, вы не можете начать работу. Я пробовал каждый трюк во всех сообщениях, которые я могу найти.
Все сообщения говорят либо для вызова «RegisterProvider», либо для добавления раздела конфигурации. Ничего не работает.

Так далеко:
У меня есть «Effort.Provider» в разделе DbProviderFactories в файле machine.config. У меня есть Effort.Provider появляется, когда я смотрю на DbProviderFactories.GetFactoryClasses (); ProcMon показывает, что он ищет и находит файл Effort.dll.

Результат:
Любой из

DbConnectionFactory.CreateTransient();   
Effort.EntityConnectionFactory.CreateTransient(connectionString);   
DbProviderFactory dataFactory = DbProviderFactories.GetFactory(dt.Rows[5]);   

бросать

DbConnectionFactory.CreateTransient();   
Effort.EntityConnectionFactory.CreateTransient(connectionString);   
DbProviderFactory dataFactory = DbProviderFactories.GetFactory(dt.Rows[5]);   

Также попробовали:
«Effort.Provider» в разделе entityFramework в Runner.exe.config, но не смог заставить это работать. Просто разбил приложение.
Удаление EF и Effort.EF6 и повторная установка. Нет видимого эффекта.
Вызов Effort.Provider.EffortProviderConfiguration.RegisterProvider (); от конструктора класса и различных мест запуска. Effort.Provider никогда не появлялся в DbProviderFactories.GetFactoryClasses ();
С помощью «Effort.Provider» в разделе DbProviderFactories в app.config он отображается в GetFactoryClasses так же хорошо, как и machine.config.

С помощью:
Windows 10
.Net 4.6
VS 2016
EF 6.1.2 (хотя он говорит, что установлено 6.1.3, не уверен, что это означает)

Нужно ли мне регистрировать DLL или что-то еще? Ничего в инструкции об этом.

Подробнее:
App.config

DbConnectionFactory.CreateTransient();   
Effort.EntityConnectionFactory.CreateTransient(connectionString);   
DbProviderFactory dataFactory = DbProviderFactories.GetFactory(dt.Rows[5]);   

Популярные ответы

Похоже, вам нужно зарегистрировать раздел конфигурации «entityFramework» в файле app.config.

<configSections>
   <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
 <entityFramework>
   <providers>
      <provider invariantName="Effort.Provider" type="Effort.Provider.EffortProviderServices,Effort" />
    </providers>
 </entityFramework>

Затем в вашем коде создайте соединение Effort и передайте его в свой DbContext. Если у вас еще нет конструктора, который принимает объект типа System.Data.Common.DbConnection, создайте его.

<configSections>
   <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
 <entityFramework>
   <providers>
      <provider invariantName="Effort.Provider" type="Effort.Provider.EffortProviderServices,Effort" />
    </providers>
 </entityFramework>

Я также рекомендую установить connectionString в app.config. Я считаю, что вызов CreateTransient создает для вас соединение, но если ваш тестируемый код имеет код, который где-то создает другой dbContext, Effort будет искать app.config для получения этой информации. Ниже приведен пример создания временной базы данных, чтобы все операции, выполненные в одном тесте, не влияли на другой тест.

<configSections>
   <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
 <entityFramework>
   <providers>
      <provider invariantName="Effort.Provider" type="Effort.Provider.EffortProviderServices,Effort" />
    </providers>
 </entityFramework>




Лицензировано согласно: CC-BY-SA
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему