Schlüsselwort nicht unterstützt: "Datenquelle", die den Entity Framework-Kontext initialisiert

161

Ich initialisiere den Entity Framework-Objektkontext, und dies gibt mir den Schlüsselwort nicht unterstützten Fehler:

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"

Ich habe die Verbindungszeichenfolge direkt aus der funktionierenden Datei web.config übernommen und nur den Pfad zur Datei geändert (den ich dynamisch festgelegt habe). Statt den Standardwert zu verwenden, habe ich diese Verbindungszeichenfolge explizit verwendet. Was könnte diesen Fehler verursachen?

Kann Poyrazoğlu
quelle
2
Bitte beziehen Sie sich auf stackoverflow.com/questions/6003085/… für einen anderen Ansatz
LCJ
1
Ich weiß nicht, wer darauf gekommen ist metadata=res:, dann res=somethingelsemit "der Syntax von überall - aber sie sollten wirklich froh sein, dass sie sich gerade nicht im selben Raum wie ich befinden: - /
Simon_Weaver
2018 .Net EF Core ähnlicher Syntaxfehler - providerName wurde von einer SqlClient-Verbindungszeichenfolge nicht benötigt. Auch keine Anführungszeichen oder Häkchen in der Zeichenfolge für den EF-Kern.
SQL Surfer

Antworten:

321

Der wahre Grund, warum Sie diesen Fehler erhalten haben, sind die "Werte in Ihrer Verbindungszeichenfolge.

Wenn Sie diese durch einfache Anführungszeichen ersetzen, funktioniert dies einwandfrei.

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

(Gepostet, damit andere das Problem schneller beheben können als ich.)

Vaccano
quelle
1
Wenn Sie die Verbindungszeichenfolge an die ObjectContent-Klasse übergeben, stellen Sie sicher, dass sie einfache Anführungszeichen enthält. Wenn Sie die Verbindung aus der .config-Datei erhalten, ist es in Ordnung, die & quot; Fluchtabfolge.
Mike Stonis
Das hat es für mich behoben.
GiddyUpHorsey
Für diejenigen unter Ihnen, die nicht mit der Funktionsweise von XML vertraut sind, "ist eine Escape-Sequenz für ein Anführungszeichen, da es sich um ein reserviertes Zeichen in XML handelt.
Vivian River
1
Vielen Dank, dass es jetzt
funktioniert
System.Data.EntityClient.EntityConnectionStringBuilder hat es für mich gemacht, danke.
Nach dem
37

Ich habe dies behoben, indem ich EntityClientzurück zu gewechselt habe SqlClient, obwohl ich Entity Framework verwendet habe.

Meine vollständige Verbindungszeichenfolge hatte also das folgende Format:

<add name="DefaultConnection" connectionString="Data Source=localhost;Initial Catalog=xxx;Persist Security Info=True;User ID=xxx;Password=xxx" providerName="System.Data.SqlClient" />
Wild
quelle
2
Hat für mich gearbeitet! +1
Yury Kerbitskov
6
Die obige Änderung führt möglicherweise (wie in meinem Fall) zu dem folgenden Fehler: "Der Kontext wird im Code First-Modus mit Code verwendet, der aus einer EDMX-Datei für die Entwicklung von Database First oder Model First generiert wurde"
Psi-Ed,
Sie können kommentieren werfen neue UnintentionalCodeFirstException () in OnModelCreating (), aber es sieht aus wie eine schmutzige
Problemumgehung
14

Dies scheint das providerName="System.Data.EntityClient"Bit zu fehlen . Sicher hast du das Ganze?

Craig Stuntz
quelle
Ok, das war ein anderes Attribut, das ich vergessen habe. Es wurde hinzugefügt, jetzt ist es 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;und es heißt jetzt Schlüssel nicht gefunden: Anbietername. Ich habe auch versucht , providerName=...statt provider name=auch, aber kein Glück.
Kann Poyrazoğlu
2
Nun, ich habe angefangen, es mit der EntityConnectionStringBuilderKlasse zu erstellen , und seltsamerweise funktioniert es jetzt. Aber ich habe immer noch keine Ahnung, warum es meine Zeichenfolge nicht akzeptiert hat, selbst mit Ihren Ergänzungen.
Kann Poyrazoğlu
3

Ob Sie es glauben oder nicht, das Umbenennen von LinqPad.exe.config in LinqPad.config hat dieses Problem gelöst.

Sameer Alibhai
quelle
12
Das ist Microsoft, alles kann passieren!
Altaf Patel
Das macht keinen Sinn. Was hat Linqpad mit der Frage zu tun und wie kann das Umbenennen einer ausführbaren Datei jemals hilfreich sein?
Gert Arnold
Nun, dieser spezielle Fehler trat in meinem Fall bei Linqpad auf und wurde dadurch behoben. Und ich habe die ausführbare Datei nicht umbenannt. Ich habe die .exe.config in .config umbenannt.
Sameer Alibhai
Auf jeden Fall ist es ein sehr spezifisches Szenario. Es fügt nur Lärm hinzu, da es nichts erklärt ,
Gert Arnold
1

Verwenden Sie stattdessen "stattdessen", um das Problem zu beheben.

Nilesh Moradiya
quelle
1

Stellen Sie sicher, dass Sie Data Sourceund nicht DataSourcein Ihrer Verbindungszeichenfolge. Der Raum ist wichtig. Vertrau mir. Ich bin ein Idiot.

Hairgami_Master
quelle