Parola chiave non supportata: "origine dati" che inizializza il contesto di Entity Framework


161

Sto inizializzando il contesto dell'oggetto Entity Framework e questo mi dà la parola chiave errore non supportato:

metadata=res://*/MainDB.csdl|res://*/MainDB.ssdl|res://*/MainDB.msl;provider=System.Data.SqlClient;provider connection string="Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Workspace\vs\Leftouch\Leftouch.Web\Data\Leftouch.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;App=EntityFramework"

Ho preso la stringa di connessione direttamente da web.config che stava funzionando e ho modificato solo il percorso del file (che ho impostato dinamicamente), e invece di usare il valore predefinito, ho usato questa stringa di connessione in modo esplicito. Cosa potrebbe causare questo errore?


2
Fare riferimento a stackoverflow.com/questions/6003085/… per un approccio diverso
LCJ

1
Non so chi sia venuto fuori con questo metadata=res:, quindi res=somethingelsecon "la sintassi di tutto il posto - ma dovrebbero essere davvero contenti di non essere nella stessa stanza come me in questo momento: - /
Simon_Weaver

2018. Net EF Core errore di sintassi simile - providerName non era necessario per una stringa di connessione SqlClient. Inoltre, nessuna virgoletta o segno di spunta nella stringa per il core EF.
Sql Surfer,

Risposte:


322

Il vero motivo per cui hai riscontrato questo errore è a causa dei "valori nella stringa di connessione.

Se sostituisci quelli con virgolette singole, funzionerà bene.

https://docs.microsoft.com/archive/blogs/rickandy/explicit-connection-string-for-ef

(Pubblicato in modo che altri possano ottenere la correzione più velocemente di me.)


1
Se si passa la stringa di connessione alla classe ObjectContent, assicurarsi che abbia virgolette singole. Se stai ricevendo la connessione dal file .config, allora puoi usare il & quot; sequenza di fuga.
Mike Stonis,

Questo è ciò che l'ha risolto per me.
GiddyUpHorsey,

Per quelli di voi che non hanno familiarità con il funzionamento di XML, "è una sequenza di escape per le virgolette perché è un carattere riservato in XML.
Fiume Vivian,

1
Grazie, funziona ora
Shivam Srivastava,

System.Data.EntityClient.EntityConnectionStringBuilder ce l'ha fatta per me, grazie.
AFract,

37

Ho risolto il problema EntityClienttornando a SqlClient, anche se stavo usando Entity Framework.

Quindi la mia stringa di connessione completa era nel formato:

<add name="DefaultConnection" connectionString="Data Source=localhost;Initial Catalog=xxx;Persist Security Info=True;User ID=xxx;Password=xxx" providerName="System.Data.SqlClient" />

2
Ha funzionato per me! +1
Yury Kerbitskov il

6
La modifica di cui sopra porterà potenzialmente (come nel mio caso) al seguente errore "Il contesto viene utilizzato in modalità Code First con il codice che è stato generato da un file EDMX per lo sviluppo Database First o Model First"
Psi-Ed

Puoi commentare il lancio di UnintentionalCodeFirstException () in OnModelCreating (), ma sembra una soluzione sporca
Alexander Ulmaskulov,

14

Questo sembra mancare il providerName="System.Data.EntityClient"bit. Sicuro di aver capito tutto?


Ok, quello era un altro attributo, l'ho dimenticato. Aggiunto ora lo è metadata=res://*/MainDB.csdl|res://*/MainDB.ssdl|res://*/MainDB.msl;provider=System.Data.SqlClient;provider name=System.Data.EntityClient;provider connection string=&quot;{0};App=EntityFramework&quot;e ora dice chiave non trovata: nome del provider. Ho provato anche providerName=...invece provider name=, ma senza fortuna.
Can Poyrazoğlu,

2
Bene, ho iniziato a crearlo usando la EntityConnectionStringBuilderclasse e, stranamente, ora funziona. Ma non ho ancora idea del perché non accettasse la mia stringa, anche con le tue aggiunte.
Can Poyrazoğlu,

3

Che ci crediate o no, rinominare LinqPad.exe.config in LinqPad.config ha risolto questo problema.


12
Questa è Microsoft, tutto può succedere!
Altaf Patel,

Questo non ha senso. Cosa ha a che fare Linqpad con la domanda e come può mai essere utile rinominare un eseguibile?
Gert Arnold,

Bene, questo particolare errore si è verificato con Linqpad nel mio caso e farlo risolto. E non ho rinominato l'eseguibile. Ho rinominato .exe.config in .config.
Sameer Alibhai il

Comunque, è uno scenario molto specifico. Aggiunge solo rumore in quanto non spiega nulla,
Gert Arnold,


1

Assicurati di avere Data Sourcee non DataSourcenella stringa di connessione. Lo spazio è importante Fidati di me. Sono un idiota.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.