2013-04-06 5 views
8

Fino a EF5, al fine di connettersi a SQL Server 2012, tutto quello che dovevo a è specificare una stringa di connessione che sembra qualcosa di simile:connessione a SQL Server con EF6

Data Source=.\SqlExpress;Initial Catalog=MyDatabase;Integrated security=True;MultipleActiveResultSets=True 

Questo metodo non funziona con EF6, con l'eccezione

Nessun provider di framework Entità trovato per il provider ADO.NET "System.Data.Odbc". Assicurarsi che il prestatore sia iscritto nella sezione 'EntityFramework' del file di configurazione dell'applicazione

non sto usando app.config di file a tutti, sto passando sopra stringa di connessione al costruttore myContext. Perché sta tentando di utilizzare il provider Odbc e invece di non utilizzare System.Data.SqlClient?

Cosa è necessario fare per connettersi a SQL Server con codice EF6 prima? Mi sono assicurato che EntityFramework.dll e EntityFramework.SqlServer.dll siano entrambi disponibili nella cartella dell'applicazione. Ho anche aggiunto il pacchetto nuget EF6 v6.0.0.1 nel progetto WPF, sebbene non usi direttamente la libreria EF, e assicurandomi che il file App.Config creato automaticamente (da nuget) sia copiato nella cartella Application (Debug) - ancora no successo.

Ho anche cercato di setprovider manualmente nel codice:

public class OeeCoachConfiguration : DbConfiguration 
{ 
    public OeeCoachConfiguration() 
    { 
     SetProviderServices("System.Data.SqlClient", 
      System.Data.Entity.SqlServer.SqlProviderServices.Instance); 
    } 
} 

Ancora senza successo. La mia struttura del progetto è (semplificato) come segue:

progetto WPF - non ha riferimento alla EF (provato anche l'aggiunta di riferimento EF)

libreria di classi ViewModel - non ha riferimento ad EF

classe del modello libreria - ha riferimento alla libreria EF (entrambe le DLL)

Libreria di classi di dati - fa riferimento alla libreria UI (entrambe le DLL).

Sto utilizzando l'approccio CodeFirst e questa configurazione funziona senza problemi con EF5. Qualsiasi aiuto è molto apprezzato.

risposta

7

Per me questo errore è stato risolto rimuovendo il pacchetto Glimpse.ADO

Modifica 20 dicembre 2013 credo che il pacchetto Glimpse.ADO ora supporta EF6, ma non ho provato.

+0

Non ho alcun controllo di terze parti correlato a ADO (o EF). – Goran

+0

La stringa di connessione specifica un fornitore? – taylonr

+0

No, la mia stringa di connessione è esattamente come ho scritto in questione. – Goran

2

Sì, per me è stato risolto rimuovendo i pacchetti nuget Glimpse.ADO e Glimpse.EF5. Grazie.

1

Opzione 1: provare ad aggiungere in seguito in app.config del progetto eseguibile.

<entityFramework>   
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 

Opzione 2: Se si desidera utilizzare il codice di registrazione basato fornitore, seguire linee guida sulla Entity Framework Providers for EF6

  • Assicurati di avere il DbConfiguration nello stesso assembly come DbContext della vostra applicazione.
5

Ho avuto lo stesso problema e alla fine ho provato quanto segue e ha funzionato (mantenendo Glimpse EF5 & pacchetti Glimpse ADO)

nel web.config ho aggiunto una copia della linea provider esistente, ma è cambiato invariantName a "System.Data.Odbc".

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="System.Data.Odbc" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 

Spero che questo aiuti.

Jonathan