Ich habe ein Framework-Objekt mit einer Entität, und wenn ich es meinem Projekt connectionstring
hinzufüge, wird das app.config
im connectionstring
Abschnitt hinzugefügt. Wenn ich jedoch ein neues erstellen entitycontext
und dieses verwenden möchte connectionstring
, wird dieser Fehler angezeigt
entity-framework
entity-framework-4
user421413
quelle
quelle
Antworten:
Ich vermute, dass Ihr Problem auf die Tatsache zurückzuführen ist, dass Ihre Lösung mehr als ein Projekt enthält und das Projekt, das Ihre Entity-Framework-Inhalte einschließlich
edmx
Dateien enthält, NICHT das Startprojekt der Lösung ist. In diesem Fallapp.config
kann CLR die Verbindungszeichenfolge zur Laufzeit nicht finden, auch wenn sie im EF- Projekt vorhanden ist. Wenn Ihre Lösung beispielsweise eine Website und ein EF-Projekt enthält, müssen Sie die Verbindungszeichenfolge aus den EF-Projektenapp.config
auf Ihre Website kopierenweb.config
. Grundsätzlich sollten alle Verbindungszeichenfolgendaten in der Konfigurationsdatei des Projekts vorhanden sein, von der die .Net-Threads von CLR (dh Ihrem Startprojekt) initiiert wurden. Wenn dies nicht der Fall ist, öffnen Sie einfach Ihreedmx
Datei, klicken Sie mit der rechten Maustaste auf die Oberfläche, wählen Sie Eigenschaften aus, kopieren Sie die Verbindungszeichenfolge und fügen Sie sie in denapp.config
Abschnitt Verbindungszeichenfolge ein. Auf diese Weise können Sie sicherstellen, dass Sie die richtige in Ihrer Konfiguration haben.BEARBEITEN:
Wie Sie hier unter Dokumentation im ObjectContext-Konstruktor sehen können , ist der erste Parameter der Name der Verbindungszeichenfolge, der zum Zeitpunkt der Erstellung Ihres EDM-Codes generiert wird. Wenn sich der Name Ihres Verbindungsstring-Namens irgendwie ändert, müssen Sie nur mit der rechten Maustaste auf Ihr Modell klicken und "Modell aus Datenbank aktualisieren ..." auswählen. Folgen Sie dann dem Assistenten, um Ihr Confing und Ihren Designer zu aktualisieren, um dies widerzuspiegeln Veränderung.
quelle
Sie müssen die Verbindungszeichenfolge in der app.config in Ihre web.config kopieren oder die gesamte Datei in das Projekt kopieren, in dem die Ausgabe angezeigt wird. Es ist eine der Bedingungen, um das Framework zu konsumieren.
quelle
Ich bin auf dieses Problem gestoßen, als ich versucht habe, meine benutzerdefinierte Datenbanklogik in eine DLL zu stellen, die von mehreren Projekten in meiner Lösung verwendet werden soll.
Obwohl die DLL die richtige Datei app.config hatte, funktionierte sie nicht. Entity Frameworks wollten die Verbindungsinformationen in der app.config der .exe. Das Kopieren der Informationen dorthin funktionierte einwandfrei.
Mortezas Lösung, die Verbindungszeichenfolge direkt in die .edmx einzufügen, funktionierte bei mir nicht, da ich den Wert dort nicht einfügen konnte - obwohl ich genau das tun wollte.
quelle
Hallo, ich hatte dieses Problem und es machte mich verrückt. Wie auch immer, endlich habe ich herausgefunden, was das Problem war. Als erstes müssen Sie sicherstellen, dass das
connectionstrings
Inapp.config
undweb.config
das Gleiche sind. Dann müssen Sie auf die.edmx
Datei doppelklicken, damit Sie die Tabellen sehen können. Sobald Sie irgendwo in der Nähe der Tabellen, aber nicht auf den Tabellen klicken, gehen Sie zu den Eigenschaften. Wählen Sie aus der Dropdown-Liste denConceptualEntityModel
Namen des Entitätscontainers aus, suchen Sie ihn und merken Sie sich ihn gut.Gehen Sie als Nächstes zum Designer der edmx-Datei und öffnen Sie die Konstruktoren. (Der Designer ist der Unterordner der edmx-Datei.) Die Konstruktoren sollten zwei Parameter im BASE-Parameter haben
das ist einer von ihnen. Der erste Parameter sollte den Namen der Projektdatei enthalten, in der sich die
.edmx
Datei befindet. Der zweite Parameter muss den Namen des Entitätscontainernamens aus den zuvor erwähnten Eigenschaften enthalten. Vergessen Sie nicht, alle Konstruktoren mit folgenden Elementen zu arrangieren:base("", "")
Zumindest war das mein Problem und mein Problem wurde so gelöst. Ich hoffe du schaffst es, deine so zu lösen.
quelle
Ich hatte eine Variation davon, die niemand zu behandeln schien.
Ich hatte ein Hauptprojekt mit einigen Modellen und ein Testprojekt mit Komponententests. Das Testprojekt funktionierte, wurde dann jedoch mit dem im OP genannten Fehler gestoppt. Ich hatte die EDMX-Datei nicht umbenannt oder verschoben.
In vielen Ratschlägen wurde der Vergleich von .config-Dateien erwähnt, aber mein Projekt hatte überhaupt keine.
Am Ende habe ich die Datei app.config aus dem Hauptprojekt in mein Testprojekt kopiert und dann hat es funktioniert. Ob dies der richtige Schritt ist oder Wartungsprobleme auftreten, wenn zusätzliche Modelle hinzugefügt werden, weiß ich nicht, aber zumindest werden meine Komponententests jetzt wieder korrekt ausgeführt.
quelle
Obwohl die Antwort von Morteza Manavi dieses Problem löst, besteht eine andere Lösung darin, die Verbindungszeichenfolge dynamisch zu erstellen und an den Konstruktor für Ihren ObjectContext zu übergeben:
Dadurch entfällt die Notwendigkeit, die Verbindungszeichenfolgeninformationen in die app.config Ihres Startprojekts zu kopieren, was zumindest in meinem Fall nicht wünschenswert war.
quelle
Ich habe vergessen, providerName = "System.Data.EntityClient" als Attribut in der Verbindungszeichenfolge hinzuzufügen. Dies führte also zu diesem Fehler
anstatt
quelle
Ich habe gerade festgestellt, dass dieser Fehler auftreten würde, wenn eine App in IIS aus VS2010 zwei Ebenen vom Website-Stamm erstellt wird. Nicht sicher, warum es passiert, müsste mehr untersucht werden. Wenn sich Ihre App beispielsweise in diesem Pfad befindet:
/admin/advertiser
Der Fehler wird angezeigt, wenn/admin
Ihre IIS-Site kein virtuelles Verzeichnis enthält.Ich habe nur ein leeres
admin
Verzeichnis erstellt, in dem mein.../intepub/wwwroot
Fehler verschwunden ist.Sie werden feststellen, dass Sie erst mit dem Debuggen beginnen können, wenn Sie den obigen Schritt ausführen.
Wir hatten dieses Problem in der Vergangenheit in unserem Team. Es dauerte einige Zeit, bis wir uns daran erinnerten, aber genau so haben wir es auch zuvor behoben.
quelle
Ich benutze n'tier Architektur und habe das gleiche Problem, aber dieses hilft mir. Ich hoffe, das wird dir helfen. Zuerst haben Sie dasselbe
connection string
auf sich,libraries
wo Sie wie in auf DB zugreifen können,app.config
undweb.config
danach fügen Sie einfach einen überladenen Konstruktor in die .edmx-Datei (Model.context.cs) ein, der jetzt zwei Konstruktoren hat, einer ist Standard und der andere, den Sie gerade hinzugefügt haben ( überladen).quelle
Ich hatte eine Klassenbibliothek, die auch nicht mit EF arbeiten wollte. Nachdem ich die app.config (oder nur den Verbindungsstring-Abschnitt) aus meiner Klassenbibliothek in das exe-Projekt kopiert hatte, funktionierte die Verbindung einwandfrei! Wahrscheinlich befindet sich die Konfigurationsdatei im selben Ordner wie das exe-Projekt und wurde daher nicht gefunden. Seien Sie also immer besonders vorsichtig, wenn eine Konfigurationsdatei in einem Klassenbibliotheksprojekt verwendet wird!
quelle
Nun ... dieses Problem könnte auch einen sehr einfachen (dummen) Grund haben ... Ich habe eine Datei aus einem anderen Projekt kopiert und vergessen, den ConnectionString in der EntityDataSource zu ändern ... wie ich zu Beginn des Projekts war und passiert bin Auf der Anmeldeseite dachte ich, es sei etwas in der Konfiguration, aber es war nur der falsche Name der Verbindungszeichenfolge (und DefaultContainerName).
quelle