2013-09-04 20 views
11

abbiamo usato Entity Framework in un ambiente di produzione per molti mesi ormai, e proprio ieri ha iniziato a ottenere gli errori sul alcuni macchine quando interrogare il database utilizzando il nostro sottoclasse di DbContext:Entity Framework: "ProviderName" nella stringa di connessione richiesta, tutto all'improvviso?

"La stringa di connessione 'myConnectionString' nel file di configurazione dell'applicazione non contiene la richiesta providerName attributo"

il nostro problema si risolve facilmente: ho aggiungere il "providerName="System.Data.SqlClient" alla stringa di connessione nel file di configurazione su tutti d server e workstation distribuiti.

Tuttavia, il mistero rimane: secondo the documentation:

L'attributo providerName è facoltativo e il valore predefinito è "System.Data.SqlClient".

Ancora più misterioso è il motivo per cui questo è iniziato improvvisamente, e apparentemente solo su alcune macchine. Non sono a conoscenza di modifiche recenti nelle versioni EF o .NET, eventuali modifiche alla versione o al provider di SQL Server o altro. Ma mi rendo conto che deve esserci qualcosa che ho trascurato.

.NET 4.5 EF 5,0

Chiunque ha tutti i suggerimenti o idee?

+0

mia macchina di sviluppo ha iniziato a fare questo a me una volta ho installato il Connettore MySQL ADO.NET per un progetto diverso ... ma MySQL sembra aggiungersi al file machine.config. Ho solo supposto che System.Data.SqlClient fosse il default - è più corretto dire che è opzionale se esiste un solo provider di entità framework configurato. – dannykay1710

risposta

8

Alcune combinazioni di driver fanno sì che la macchina si trovi in ​​uno stato in cui è ambiguo il driver da utilizzare, quindi richiede un nome di provider esplicito.

Probabilmente si trattava di un'altra installazione di driver o di un'applicazione separata o di un aggiornamento automatico di Windows in esecuzione.

Essere espliciti con il nome del provider non fa male nulla però. Dovresti stare bene aggiungendolo; sono solo alcuni caratteri in più nella stringa di connessione. Non avrà mai bisogno di cambiare in futuro o nulla.

vostra dichiarazione aggiornato dovrebbe leggere:

<connectionStrings> 
    <add name="<My connection string name>" connectionString="<Connection string proper>" providerName="System.Data.SqlClient" /> 
</connectionStrings> 
+1

Ciao, mi dispiace per la domanda stupida. Ma cosa significa esattamente providerName qui? È lo spazio dei nomi? Fa riferimento a un driver/DLL specifico? – SteveB

+1

In questo caso, il provider è generalmente lo stesso di un driver, sì. –

2

È possibile utilizzare anche:

providerName="System.Data.EntityClient" 

poi:

<add name="name_here" connectionString="Data Source="pathofdatabase" providerName="System.Data.EntityClient" /> 
Problemi correlati