2016-05-02 11 views
5

PANORAMICA
L'utilizzo di Fitnesse con EF6 non consente di avviare lo sforzo. Ho provato ogni trucco in tutti i post che riesco a trovare.
Tutti i post dicono di chiamare "RegisterProvider" o aggiungere una sezione di configurazione. Neanche sta funzionando.Come posso ottenere che Effort funzioni con EntityFramework?

Finora:
Ho "Effort.Provider" nella sezione DbProviderFactories in machine.config. Ho Effort.Provider che compare quando guardo DbProviderFactories.GetFactoryClasses(); ProcMon indica che sta cercando e trova Effort.dll.

Risultato:
Qualsiasi di

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

tiro

Effort.Exceptions.EffortException: The Effort library failed to register 

cercato anche:
"Effort.Provider" nella sezione EntityFramework di Runner.exe.config ma la quello di lavorare. Ho appena bloccato l'app.
Disinstallazione di EF e Effort.EF6 e reinstallazione. Nessun effetto visibile
Calling Effort.Provider.EffortProviderConfiguration.RegisterProvider(); da un costruttore di classe e varie posizioni di avvio. Effort.Provider non è mai apparso in DbProviderFactories.GetFactoryClasses();
Con "Effort.Provider" nella sezione DbProviderFactories in app.config, viene visualizzato in GetFactoryClasses proprio come machine.config.

Usando:
di Windows 10
.Net 4.6
VS 2016
EF 6.1.2 (anche se si dice 6.1.3 è installato, non so cosa voglia dire)

Ho bisogno di registrarsi una DLL o qualcosa del genere? Niente nelle istruzioni a riguardo.

piu 'dettagli:
App.config

<configuration> 
    <runtime> 
     <loadFromRemoteSources enabled="true"/> 
    </runtime> 
    <system.data> 
     <DbProviderFactories> 
      <add name="Effort.Provider" invariant="Effort.Provider" description="Effort.Provider" type="Effort.Provider.EffortProviderFactory, Effort" /> 
     </DbProviderFactories> 
    </system.data> 
</configuration> 
+0

Ho pensato che potrebbe essere raggiungere lo stabilimento di sforzo, che sembra essere Effort.Provider.EffortProviderFactory e lancio di un'eccezione, ma ciò non sembra essere il caso. – BWhite

risposta

6

Sembra che è necessario registrare la sezione config "EntityFramework" nel file 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> 

Quindi nel codice creare la connessione Effort e passarla al DbContext. Se non si dispone già di un costruttore che accetta un oggetto di tipo System.Data.Common.DbConnection, crearne uno.

System.Data.Common.DbConnection connection = DbConnectionFactory.CreateTransient(); 
var context = new MyContext(connection); 

Si consiglia inoltre di impostare un connectionString in app.config. Credo che la chiamata a CreateTransient crei una connessione per te, ma se il tuo codice sotto test ha un codice che crea un altro dbContext da qualche parte, Effort cercherà l'app.config per ottenere tali informazioni. Di seguito è riportato un esempio che creerà un database temporaneo in modo che tutte le operazioni completate in un test non influiscano su un altro test.

<add name="DefaultConnection" connectionString="Data Source=in-process;IsTransient=true" providerName="Effort.Provider" /> 
+0

La parte di defaultConnection è l'unica parte che non ho. Ci proverò. Non ho guardato troppo in quella direzione, perché ho pensato che avrebbe dato un errore diverso, non impedire alla classe di essere creata. Infatti, scrivo alla console nel costruttore. Ho tutti i motivi per credere all'errore. Non riesce a trovarlo. Anche se procmon mostra di leggere la libreria dello sforzo. – BWhite

+0

Ho lo stesso problema, ma questa risposta non lo risolve. Altre idee? – Jess

+1

L'unica altra cosa che posso pensare è di avere la seguente sezione come elemento figlio dell'elemento nel tuo app.config ' 'Assicurarsi che l'invariante corrisponda a invariantName nell'EF sezione fornitori –

Problemi correlati