Ich verwende Entity Framework 4 mit dem Model First-Ansatz.
Ich habe das Projekt gestartet, die Entitäten entworfen und die Datenbank generiert. Alles hat gut funktioniert.
Dann musste ich zurückgehen und meinem Modell eine weitere Entität hinzufügen. Wenn ich jedoch eine Entität in den EDMX ziehe, wird folgende Fehlermeldung angezeigt:
In Ordung! Ich muss nur Entity1 einer Tabelle zuordnen. Aber hey! Ich verwende den Model First-Ansatz. Ich erwarte, dass er die Tabelle für mich erstellt, wenn ich die DDL generiere.
Wie kann ich diesen Fehler umgehen?
.net
entity-framework
entity-framework-4
André Pena
quelle
quelle
Antworten:
Dies liegt an der Art und Weise, wie EF4 mit model-first arbeitet.
Wenn Sie zum ersten Mal ein Modell erstellen, befindet sich die SSDL in einem Zustand, in dem sie nicht vorhanden ist. Sie können Entitäten ziehen, zuordnen usw. Wenn Sie sich die SSDL in der EDMX-Datei ansehen, werden Sie feststellen, dass keiner der Entitäten eine Speichertabelle in der SSDL zugeordnet ist.
Das ändert sich, wenn Sie auf den
Generate Database From Model
Kontextmenüpunkt klicken . Der verwirrende Teil ist, dass diese Aktion mehr als nur ein DDL-Skript generiert. Tatsächlich wird die EDMX-Datei so geändert, dass sie SSDL-Informationen enthält. Ab diesem Zeitpunkt wird die EDMX-Datei in einen Status versetzt, in dem jede Entität in der Designer- / CSDL einer Entität in der SSDL zugeordnet werden muss. Wenn keine Zuordnung vorgenommen wird, wird ein Fehler bei der Kompilierung ausgelöst:Eine weitere interessante Tatsache ist, dass es nicht die Art von Fehler ist, die die Kompilierung verhindert. Es wird tatsächlich die Ausgabeklassenbibliothek generieren. Sollte es nicht eine Warnung sein oder so?
Um diesen Fehler zu vermeiden, müssen Sie nach dem Einfügen einer neuen Entität nur noch
Generate Database From Model
einmal tun . Dadurch wird die SSDL aktualisiert und die Zuordnungen korrigiert.BEARBEITEN
Wenn Sie nicht model-first verwenden und "aus Datenbank aktualisieren", wird dieser Fehler auch angezeigt, wenn Sie eine Tabelle in DB Server gelöscht haben. Dies liegt daran, dass Entity Framework die Entität nicht automatisch für Sie löscht. Löschen Sie die Entität manuell und der Fehler wird behoben.
quelle
Ich habe festgestellt, dass ich denselben Fehler erhalten habe, weil ich vergessen habe, eine referenzielle Einschränkung zu erstellen, nachdem ich eine Zuordnung zwischen zwei Entitäten erstellt habe.
quelle
Wenn Sie ein Modell mit Entities Framework entwickeln, kann es manchmal zu diesem lästigen Fehler kommen:
Dies macht möglicherweise keinen Sinn, wenn im EDM alles gut aussieht, aber das liegt daran, dass dieser Fehler normalerweise nichts mit dem EDM zu tun hat. Was es sagen sollte, ist "Ihre Datenbankdateien neu generieren".
Sie sehen, Entities prüft während der Erstellung SSDL und MSL. Wenn Sie also nur Ihr EDM geändert haben, aber kein Datenbankmodell generieren verwenden , wird beanstandet, dass in Ihren SQL-Skripten Dinge fehlen.
Kurz gesagt lautet die Lösung: "Vergessen Sie nicht, jedes Mal nach dem Aktualisieren Ihres EDM ein Datenbankmodell zu generieren, wenn Sie die erste Modellentwicklung durchführen. Ich hoffe, Ihr Problem ist gelöst."
quelle
In meinem Fall hatte ein anderer Entwickler einige der Tabellen aus der zugrunde liegenden Datenbank entfernt. Als ich dies erkannte und diese Tabellen aus der Entität entfernte, war das Problem gelöst. War nicht so offensichtlich wie es sich anhört.
quelle
Ich bin auf den gleichen Fehler gestoßen, habe aber nicht model-first verwendet. Es stellte sich heraus, dass meine EDMX-Datei irgendwie einen Verweis auf eine Tabelle enthielt, obwohl sie im Designer nicht angezeigt wurde. Interessanterweise wurde die Tabelle bei einer Textsuche nach dem Tabellennamen in Visual Studio (2013) nicht gefunden.
Um das Problem zu lösen, habe ich einen externen Editor (Notepad ++) verwendet, um den Verweis auf die fehlerhafte Tabelle in der EDMX-Datei zu finden, und dann (sorgfältig) alle Verweise auf die Tabelle entfernt. Es tut mir leid zu sagen, dass ich nicht weiß, wie die EDMX-Datei überhaupt in diesen Zustand gekommen ist.
quelle
Ich hatte eine Tabellenänderung und es wurde eine andere Entität mit der Nummer 1 am Ende (wie
MyEntity1
und aMyEntity
) erstellt, wie vom edmx-Modellbrowser bestätigt. Etwas an den beiden Entitäten zusammen verwirrte die Verarbeitung.Durch Entfernen und erneutes Hinzufügen der Tabelle wurde das Problem behoben.
Beachten Sie, dass Sie, wenn TFS angeschlossen ist, nach dem Löschen den edmx einchecken. Holen Sie sich dann und nur dann die neueste und fügen Sie sie in einem bestimmten zweistufigen Prozess erneut hinzu. Andernfalls wird TFS mit dem Löschen und erneuten Hinzufügen gleichnamiger Entitäten verwechselt, was Probleme zu verursachen scheint.
quelle
Ein schnellerer Weg für mich war, die Tabellen zu löschen und erneut hinzuzufügen. Es hat sie automatisch zugeordnet. :) :)
quelle
Für diejenigen, die den
Database First
Ansatz verwenden, müssen Sie nach dem Einfügen einer neuen Entität lediglichGenerate Database From Model
erneut mit der rechten Maustaste auf Ihre.edmx
Datei klicken und auswählenGenerate Database From Model...
quelle
Hatte diesen Fehler, als ich eine Tabelle aus der Datenbank gelöscht hatte. Lösen Sie das Problem, indem Sie mit der rechten Maustaste auf das EDMX-Diagramm klicken, zu Eigenschaften wechseln, die Tabelle aus der Liste im Eigenschaftenfenster auswählen und sie (mit der Löschtaste) aus dem Diagramm löschen.
quelle
Search within file content
und überprüftSearch External Files
Entfernen Sie alle Codezeilen, die auf die fehlende Entität verweisen. Sie werden so aussehen:
Dieser Fehler tritt häufig bei Tabellen auf, die aus der Datenbank gelöscht wurden.
Wenn man eine Tabelle in der Datenbank ablegt oder nur die
web.config.connectionStrings
für die EF-zugeordnete Datenbank ändert, ist es das Problem, auf eine neue zu verweisen und nicht auf die, die zum Generieren der ursprünglichen Zuordnungen verwendet wird.Es ist diese neue Datenbank, in der diese Entitäten mit dem Fehler 3027 nicht vorhanden sind.
quelle
Ich hatte den Fehler, als ich versuchte, ein benutzerdefiniertes Ergebnis für eine gespeicherte Prozedur zu erstellen, und nahm an, dass es sich um eine Entität handeln musste.
Die Lösung bestand darin, dass ich gerade einen komplexen Typ im Modellbrowser erstellt und diesen als Ergebnis den "Funktionsimporten bearbeiten" zugewiesen habe.
Ich werde es hier hinzufügen, da es so aussieht, als ob diese Frage ist, wohin Google Sie führt, wenn Sie diesen Fehler erhalten.
quelle
Ich hatte alles richtig eingestellt (Kardinalitäten und abhängige Eigenschaften), konnte aber nicht herausfinden, warum ich immer wieder Fehler erhalte. Schließlich stellte EF fest, dass EF eine eigene Spalte in einer abhängigen Tabelle (table_tablecolumn) generiert hat und keine Beziehung zur Tabelle hat, sodass keine Zuordnung angegeben wurde. Ich musste die Spalte in der EDMX-Datei löschen und die Lösung neu erstellen, mit der das Problem behoben wurde. Ich verwende den DB-Ansatz.
quelle
Modell aus Datenbank aktualisieren funktioniert bei mir nicht.
Ich musste die in Konflikt stehende Entität entfernen, dann das Update-Modell aus der Datenbank ausführen und zuletzt die Lösung neu erstellen. Danach funktioniert alles gut.
quelle
Teilen Sie dies für andere Menschen. In meinem Fall haben wir an einer gemeinsam genutzten MVC-Lösung gearbeitet und ein gemeinsames Modul für Tabellen verwendet, die wir für Dropdowns verwenden. Ich habe den Fehler erhalten, als ich das Entitätsmodell durch Hinzufügen einer neuen Tabelle aktualisiert habe. Es stellt sich heraus, dass beim Aktualisieren des EDMX wahrscheinlich mein Rechtezugriff auf die Datenbank aktualisiert wurde, was dazu führte, dass ich keinen Zugriff auf diese bestimmte Tabelle hatte, die mir zur Verfügung stand
no mapping specified
.Das Problem wurde durch erneutes Hinzufügen und Zugriff auf meinen Benutzer behoben.
quelle
Ich glaube, ich habe dies dadurch erreicht, dass einige Tabellen nicht explizit aus dem edmx gelöscht wurden, bevor sie umbenannt und erneut hinzugefügt wurden. Stattdessen habe ich die Tabellen einfach umbenannt und dann ein Modell aus der Datenbank aktualisiert, da ich dachte, es würde verschwinden und sie aus dem Modell löschen. Ich habe dann ein weiteres Update-Modell aus der Datenbank erstellt und die umbenannten Tabellen hinzugefügt.
Die Seite arbeitete mit den neuen Tabellen, aber ich hatte den Fehler. Schließlich bemerkte ich, dass die ursprünglichen Tabellen noch im Modell waren. Ich habe sie aus dem Modell gelöscht (im edmx-Bildschirm darauf klicken, Schlüssel löschen), und dann ist der Fehler behoben.
quelle