Test dell'unità di sforzo Entity framework 6.1.3 DB-first

c# effort entity-framework unit-testing

Domanda

Sto riscontrando problemi con l'uso di Effort framework (versione 1.1.4) su unit test del mio DB-layer.

Ho un DB-layer che utilizza Entity framework 6.1.3 e il modello è stato creato utilizzando l'approccio database-first, quindi esiste un file *.edmx che descrive il modello.

Ho creato una classe parziale per esporre un costruttore aggiuntivo utilizzato dai test di unità con uno sforzo del genere:

public partial class Entities
{
    public Entities(DbConnection connection)
        : base(connection, true)
    {
    }
}

Il semplice test unitario assomiglia a questo:

public partial class Entities
{
    public Entities(DbConnection connection)
        : base(connection, true)
    {
    }
}

Quando eseguo il test dell'unità, viene generata un'eccezione per la linea:

public partial class Entities
{
    public Entities(DbConnection connection)
        : base(connection, true)
    {
    }
}

{"Il provider non ha restituito un'istanza ProviderManifest."} InnerException Message: {"Impossibile determinare la versione di archiviazione, è richiesta una connessione di archiviazione valida o un suggerimento di versione."}

Altri post che ho trovato suggeriscono di modificare l'attributo ProviderManifestToken nel file *.edmx da "2012" a "2008". Questo sembra risolvere il problema, ma dà un'altra mia eccezione quando provo ad usare il contesto per la prima volta qui:

public partial class Entities
{
    public Entities(DbConnection connection)
        : base(connection, true)
    {
    }
}

NotSupportedException Impossibile determinare il nome del provider per la factory provider di tipo 'System.Data.EntityClient.EntityProviderFactory'. Assicurarsi che il provider ADO.NET sia installato o registrato nella configurazione dell'applicazione.

Qualcuno sa come risolvere questo problema, quindi posso usare Effort con il framework di entità 6.1.3 Approccio DB-first?

Sono stato in grado di utilizzare Effort (versione 1.1.4) in DB-layers di test unitario creati in EF 4 e EF 5 con approccio DB-first - questo è il motivo per cui penso che la versione EF possa essere di interesse ...

Risposta accettata

Un mio collega ha trovato la soluzione al mio problema!

A quanto pare stavo usando il pacchetto nuget "Effort" invece del pacchetto nuget "Effort.EF6". Dopo aver disinstallato e installato l'altro, dovevo anche aggiornare il mio App.Config con i tag:

  <system.data>
    <DbProviderFactories>
      <add name="Effort.Provider" invariant="Effort.Provider" description="Effort.Provider" type="Effort.Provider.EffortProviderFactory,Effort" />  
    </DbProviderFactories>
  </system.data>

  <entityFramework>
    <providers>
      <provider invariantName="Effort.Provider" type="Effort.Provider.EffortProviderServices, Effort" />
    </providers>
  </entityFramework>

E ho anche incluso una chiamata nel SetUp per i miei test di unità per registrare il provider di sforzo:

  <system.data>
    <DbProviderFactories>
      <add name="Effort.Provider" invariant="Effort.Provider" description="Effort.Provider" type="Effort.Provider.EffortProviderFactory,Effort" />  
    </DbProviderFactories>
  </system.data>

  <entityFramework>
    <providers>
      <provider invariantName="Effort.Provider" type="Effort.Provider.EffortProviderServices, Effort" />
    </providers>
  </entityFramework>

Questo ha risolto il problema per il mio. Spero che possa fornire un aiuto agli altri!




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é