Warum wird folgende Fehlermeldung angezeigt: Für das folgende EntitySet / AssociationSet - Entity1 wurde keine Zuordnung angegeben?

96

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:

Geben Sie hier die Bildbeschreibung ein

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?

André Pena
quelle
1
Kann also ein Datenbankskript aus Ihrem Modell generiert werden?
Ladislav Mrnka

Antworten:

147

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 ModelKontextmenü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:

Für das folgende EntitySet / AssociationSet - (EntityName) wurde keine Zuordnung angegeben.

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

André Pena
quelle
1
Ich habe das gleiche Problem, nachdem ich mein Modell gegen bd-Änderungen aktualisiert habe (das könnte nicht gut sein, da mein Ansatz nicht das erste Modell ist).
Balanza
5
@balanza Wenn Sie model-first nicht verwenden und Ihr Modell basierend auf der Datenbank aktualisieren, wird dieser Fehler angezeigt, wenn Sie eine Tabelle auf dem Server löschen, da der EF-Designer die Entität NICHT automatisch löscht. Wenn Sie den Entitätstyp manuell löschen, wird der Fehler behoben
André Pena
Ich habe meine direkt in der XML-Datei des Entitätsdatenmodells geändert. Ich hatte jede Menge Tabellen und Funktionen und es bestand die Gefahr einer Nichtübereinstimmung, daher habe ich es manuell gemacht.
Bat_Programmer
Das ist SUPER hilfreich. Wenn Sie model-first und "update from database" verwenden und neue Tabellen abrufen, wird der Fehler ebenfalls angezeigt. Wenn Sie jedoch "Datenbank aus Modell generieren" ausführen (das generierte Skript muss nicht ausgeführt werden - es werden Ihre Daten zerstört!), Werden die Zuordnungsprobleme in Ihrem Code behoben, und Sie werden in Zukunft keine Probleme damit haben, es zu verwenden.
Brian Warshaw
1
Wie würden Sie mit der Schemaaktualisierung für bereits bereitgestellte SQL Server CE-Datenbanken umgehen? Kann dies auf eine separate Frage verschieben, wenn es sich um ein völlig unabhängiges Verfahren handelt
FYK
35

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.

Mal
quelle
13
Zu Ihrer Information: Überprüfen Sie die Eigenschaften der Zuordnung, und unten ist "Referentielle Einschränkung" leer. Klicken Sie auf die Auslassungspunkte und erstellen Sie eine Einschränkung.
Patrice Calvé
Das hat mir geholfen. Ich musste eine 1 .. * -Beziehung von meiner Ursprungsentität zu meiner Navigationsentität erstellen.
duyn9uyen
21

Fehler 3027: Für das folgende EntitySet / AssociationSet wurde keine Zuordnung angegeben ... "- Entity Framework-Kopfschmerzen

Wenn Sie ein Modell mit Entities Framework entwickeln, kann es manchmal zu diesem lästigen Fehler kommen:

Fehler 3027: Für das folgende EntitySet / AssociationSet [Entity- oder Association-Name] wurde keine Zuordnung angegeben.

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

Azeem ahmad
quelle
Dies funktionierte für den gleichen Fehler beim Generieren des Datenbankmodells, um die Ausnahme zu
beseitigen
7

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.

Graham Laight
quelle
6

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.

Fledermauspocken
quelle
5

Ich hatte eine Tabellenänderung und es wurde eine andere Entität mit der Nummer 1 am Ende (wie MyEntity1und a MyEntity) 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.

ΩmegaMan
quelle
Ich hatte das gleiche Problem nach einem Tabellenwechsel. Ich habe die gleichen Entitäten mit den Nummern 1 und 2 (MyEntity1, MyEntity2) an mehreren Stellen unter dem Modell gefunden. Ich habe in jedem Zweig (Diagramme, Entitätstypen usw.) nachgesehen und jede Instanz von MyEntity und MyEntity [n] entfernt. Aus gutem Grund habe ich eine "Clean Solution" durchgeführt und dann von der Datenbank aktualisiert, um nur MyEntity erneut hinzuzufügen.
MsTapp
4

Ein schnellerer Weg für mich war, die Tabellen zu löschen und erneut hinzuzufügen. Es hat sie automatisch zugeordnet. :) :)

Atul K.
quelle
2

Für diejenigen, die den Database FirstAnsatz verwenden, müssen Sie nach dem Einfügen einer neuen Entität lediglich Generate Database From Modelerneut mit der rechten Maustaste auf Ihre .edmxDatei klicken und auswählenGenerate Database From Model...

Masoud Darvishian
quelle
0

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.

Live-Liebe
quelle
0
  1. Gehen Sie zum Projektmappen-Explorer und klicken Sie auf die Schaltfläche Suchen
  2. Lassen Sie beide Search within file contentund überprüftSearch External Files
  3. Geben Sie den Entitätsnamen ein, den Ihr Mapping nicht erkennt.
  4. Löschen Sie alle Dateien, die mit dem Problem zusammenhängen. Diese werden wahrscheinlich nach derselben fehlenden Entität benannt. Löschen Sie KEINE Datei mit Ihrem Kontextklassennamen in der Datei, insbesondere wenn ihre Erweiterungen .cs oder .tt sind. In der Kontext-CS-Datei .
  5. Entfernen Sie alle Codezeilen, die auf die fehlende Entität verweisen. Sie werden so aussehen:

    public virtual DbSet< Entity1> Entity1 { get; set; }

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.connectionStringsfü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.

MarcoSantana
quelle
0

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.

Thomas Koelle
quelle
0

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.

user2965957
quelle
0

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.

Willy David Jr.
quelle
0

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.

AdorableVB
quelle
0

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.

apswrk
quelle