wake-up-neo.com

Warum erhalte ich diesen Fehler: Keine Zuordnung für das folgende EntitySet/AssociationSet - Entity1 angegeben?

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 auf das EDMX-Gerät ziehe, erhalte ich diesen Fehler:

enter image description here

In Ordung! Ich muss nur Entity1 einem Tisch 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?

87
André Pena

Dies liegt daran, wie EF4 mit model-first arbeitet.

Wenn Sie zum ersten Mal ein Model-First-Modell erstellen, ist die SSDL nicht vorhanden. Sie können Entitäten ziehen, verknüpfen und so weiter. Wenn Sie jedoch die SSDL in der EDMX-Datei betrachten, werden Sie feststellen, dass keine der Entitäten eine zugeordnete Speichertabelle in der SSDL hat.

Dies ändert sich, wenn Sie auf das Kontextmenüelement Generate Database From Model klicken. Das Verwirrende daran ist, dass diese Aktion nicht nur ein DDL-Skript generiert. Die EDMX-Datei wird so geändert, dass sie SSDL-Informationen enthält. Ab diesem Zeitpunkt wird die EDMX-Datei in einen Zustand versetzt, in dem jede Entität in der Designer/CSDL einer Entität in der SSDL zugeordnet werden muss. Wenn eine Zuordnung nicht erfolgt, wird ein Fehler beim Kompilieren ausgelöst: 

Keine Zuordnung für das folgende EntitySet/AssociationSet - (EntityName) angegeben

Eine weitere interessante Tatsache ist, dass es nicht die Art von Fehlern ist, die die Kompilierung verhindern. In der Tat wird die Ausgabe-Klassenbibliothek generiert. Sollte es nicht eine Warnung oder etwas sein?

Um diesen Fehler zu vermeiden, müssen Sie nach dem Einfügen einer neuen Entität erneut Generate Database From Model eingeben. Das wird die SSDL aktualisieren und die Zuordnungen korrigieren.

EDIT

Wenn Sie Model-First nicht verwenden und "Update from database" verwenden, 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. Wenn Sie die Entität manuell löschen, wird der Fehler behoben.

140
André Pena

Ich fand den gleichen Fehler, weil ich vergessen hatte, eine referenzielle Einschränkung zu erstellen, nachdem ich eine Verbindung zwischen zwei Entitäten erstellt hatte. 

34
Mal

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

Wenn Sie ein Modell mit Entities Framework entwickeln, kann dieser lästige Fehler gelegentlich auftreten:

Fehler 3027: Keine Zuordnung für das folgende EntitySet/AssociationSet [Entity or Association Name] angegeben

Dies macht möglicherweise keinen Sinn, wenn auf dem EDM alles gut aussieht. Dies liegt jedoch daran, dass dieser Fehler normalerweise nichts mit dem EDM zu tun hat. Was es sagen soll ist "regenerieren Sie Ihre Datenbankdateien".

Sie sehen, Entities prüft die SSDL und MSL während des Builds. Wenn Sie also gerade Ihr EDM geändert haben, aber nicht Generate Database Model ... verwenden, dann beklagt es sich, dass in Ihren SQL-Skripts Sachen fehlen.

kurz gesagt, die Lösung lautet: "Vergessen Sie nicht, Database Model generieren jedes Mal, nachdem Sie Ihr EDM aktualisiert haben, wenn Sie die erste Entwicklung des Modells durchführen. Ich hoffe, Ihr Problem ist gelöst.".

20
Azeem ahmad

In meinem Fall hatte ein anderer Entwickler einige der Tabellen aus der zugrunde liegenden Datenbank entfernt. Als ich dies feststellte und diese Tabellen aus der Entität entfernte, war das Problem gelöst. War nicht so offensichtlich wie es klingt.

7
Graham Laight

Ich bin auf den gleichen Fehler gestoßen, habe aber nicht zuerst model benutzt. 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 der Textsuche nach dem Tabellennamen in Visual Studio (2013) nicht gefunden. 

Um das Problem zu lösen, habe ich einen externen Editor verwendet, um die Referenz auf die fehlerhafte Tabelle in der EDMX-Datei zu finden, und dann (sorgfältig) alle Referenzen auf die Tabelle entfernt. Es tut mir leid zu sagen, dass ich nicht weiß, wie die EDMX-Datei überhaupt in diesen Zustand geriet.

5
batpox

Ich hatte eine Tabellenänderung und es wurde eine andere Entität mit der Nummer 1 am Ende erstellt (wie MyEntity1 und eine MyEntity), wie vom edmx-Modellbrowser bestätigt. Etwas über die beiden Entitäten zusammen verwirrte die Verarbeitung.

Durch das Entfernen der Tabelle und das erneute Hinzufügen wurde die Tabelle behoben.


Beachten Sie, dass bei Anschluss von TFS nach dem Löschen ein Check-in des edmx durchgeführt wird. Dann und nur dann holen Sie sich das Neueste und fügen Sie es in einem bestimmten zweistufigen Prozess erneut hinzu. Andernfalls wird TFS mit dem Löschen und erneuten Hinzufügen derselben benannten Entität (en) verwechselt, was Probleme zu verursachen scheint.

4
ΩmegaMan

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

3
Atul K.

Für diejenigen, die die Database First-Methode verwenden, müssen Sie nach dem Einfügen einer neuen Entität nur noch Generate Database From Model klicken, indem Sie mit der rechten Maustaste auf Ihre .edmx-Datei klicken und Generate Database From Model... auswählen.

1

Ich hatte alles richtig eingestellt (Kardinalitäten und abhängige Eigenschaften), konnte aber nicht herausfinden, warum ich Fehler bekomme. Schließlich stellte sich heraus, dass EF eine eigene Spalte in der abhängigen Tabelle (table_tablecolumn) generiert hat und keine Beziehung zu der Tabelle hat. Daher wurde keine Zuordnung angegeben. Ich musste die Spalte in der EDMX-Datei löschen und die Lösung neu erstellen, wodurch das Problem behoben wurde. Ich verwende den DB-Ansatz.

0
user2965957

Hatte diesen Fehler, als ich eine Tabelle aus der Datenbank gelöscht hatte. Sie haben das Problem gelöst, indem Sie mit der rechten Maustaste auf das EDMX-Diagramm geklickt haben. Klicken Sie dann auf Eigenschaften, wählen Sie die Tabelle aus der Liste im Eigenschaftenfenster aus und löschen Sie sie (mithilfe der Löschtaste) aus dem Diagramm.

0
live-love

Teilen Sie dies für andere Menschen. In meinem Fall arbeiteten wir an einer gemeinsam genutzten MVC-Lösung und verwendeten ein gemeinsames Modul für Tabellen, die wir für Dropdowns verwenden. Ich habe den Fehler erhalten, als ich das Entity-Modell durch Hinzufügen einer neuen Tabelle aktualisiert habe. Es stellte sich heraus, dass beim Aktualisieren des EDMX wahrscheinlich mein Rechtezugriff auf die Datenbank aktualisiert wurde, was dazu führte, dass ich nicht auf diese bestimmte Tabelle zugreifen konnte, die mir no mapping specified gab.

Durch das erneute Hinzufügen und Zugriff auf meinen Benutzer wurde das Problem gelöst.

0
AdorableVB

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 war, dass ich gerade einen komplexen Typ im Modellbrowser erstellt und diesen als Ergebnis der "Importfunktionsfunktion" zugewiesen habe.

Ich werde es hier hinzufügen, da es so aussieht, als ob diese Frage von Google kommt, wenn Sie diesen Fehler erhalten.

0
Thomas Koelle

Modell aus Datenbank aktualisieren funktioniert für mich nicht. 

Ich musste die konfliktierte Entität entfernen, dann Update Model von Database ausführen und die Lösung zuletzt neu erstellen. Danach funktioniert alles gut.

0
Willy David Jr
  1. Gehen Sie zum Projektmappen-Explorer und klicken Sie auf die Schaltfläche Suchen
  2. Hinterlassen Sie Search within file content und Search External Files
  3. Geben Sie den Namen der Entitäten ein, den Ihr Mapping nicht erkennt. 
  4. Löschen Sie alle Dateien, die sich auf das Problem beziehen. Diese werden wahrscheinlich nach der gleichen fehlenden Entität benannt. Löschen Sie KEINE Datei mit dem Namen der Kontextklasse in der Datei, insbesondere wenn die Erweiterung .cs oder .tt ist. In der Context-Datei .cs .
  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 bei Tabellen auf, die aus der Datenbank gelöscht wurden. 

Wenn Sie eine Tabelle in der Datenbank ablegen oder einfach nur den web.config.connectionStrings für die EF Mapped-Datenbank ändern, zeigt dies auf eine neue Tabelle und nicht auf den, der zum Generieren der ursprünglichen Zuordnungen verwendet wird.

Es ist diese neue Datenbank, die diese Entitäten mit dem 3027-Fehler nicht vorhanden sind. 

0
MarcoSantana