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?


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.)


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" />

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?


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.


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

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.