Come faccio a lavorare con EntityFramework?

c# effort entity-framework

Domanda

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.

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

Risultato:
Qualsiasi

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

gettare

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

Provato anche:
"Effort.Provider" nella sezione entityFramework di Runner.exe.config ma non è riuscito a farlo funzionare. Ho appena bloccato l'app.
Disinstallazione di EF e Effort.EF6 e nuova installazione. 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:
Windows 10
.Net 4.6
VS 2016
EF 6.1.2 (sebbene sia installato 6.1.3, non è sicuro di cosa significhi)

Devo registrare una DLL o qualcosa del genere? Niente nelle istruzioni a riguardo.

Più dettagli:
App.config

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

Risposta popolare

Sembra che tu abbia bisogno di registrare la sezione di configurazione "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, crea la connessione Effort e passala al tuo DbContext. Se non si dispone già di un costruttore che accetta un oggetto di tipo System.Data.Common.DbConnection, crearne 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>

Ti consigliamo inoltre di impostare una connectionString nel tuo 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.

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



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché