¿Cómo obtengo Esfuerzo para trabajar con EntityFramework?


Pregunta

VISIÓN DE CONJUNTO
Al usar Fitnesse con EF6, no se puede obtener Esfuerzo para iniciar. He intentado todos los trucos en todos los mensajes que puedo encontrar.
Todas las publicaciones dicen que llamar a 'RegisterProvider', o agregar una sección de configuración. Tampoco está funcionando.

Hasta aquí:
Tengo "Effort.Provider" en la sección DbProviderFactories en machine.config. Tengo Effort.Provider apareciendo cuando miro DbProviderFactories.GetFactoryClasses (); ProcMon muestra que está buscando y encontrando Effort.dll.

Resultado:
Cualquiera de

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

lanzar

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

También probé:
"Effort.Provider" en la sección entityFramework de Runner.exe.config pero no pudo hacer que eso funcionara. Simplemente se estrelló la aplicación.
Desinstalando EF y Effort.EF6 y reinstalando. No hay efecto visible.
Llamando a Effort.Provider.EffortProviderConfiguration.RegisterProvider (); de un constructor de clase y varias ubicaciones de inicio. Effort.Provider nunca apareció en DbProviderFactories.GetFactoryClasses ();
Con "Effort.Provider" en la sección DbProviderFactories en app.config, se muestra en GetFactoryClasses tan bien como machine.config.

Utilizando:
Windows 10
.Net 4.6
VS 2016
EF 6.1.2 (aunque dice que está instalado 6.1.3, no estoy seguro de lo que eso significa)

¿Necesito registrar un DLL o algo? Nada en las instrucciones sobre eso.

Más detalles:
App.config

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

Respuesta popular

Parece que necesita registrar la sección de configuración "entityFramework" en el archivo 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>

Luego, en su código, cree la conexión de Esfuerzo y pásela a su DbContext. Si aún no tiene un constructor que toma un objeto de tipo System.Data.Common.DbConnection, cree uno.

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

También recomendaría establecer un connectionString en tu app.config. Creo que la llamada a CreateTransient crea una conexión para usted, pero si su código bajo prueba tiene un código que crea otro dbContext en algún lugar, Effort buscará en la aplicación.config para obtener esa información. A continuación se muestra un ejemplo que creará una base de datos transitoria para que todas las operaciones completadas en una prueba no afecten a otra prueba.

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




Licencia bajo: CC-BY-SA
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué