Fehler beim Zuordnen von Fragmenten in Entity Framework 4 beim Hinzufügen eines neuen Entitätsskalars

72

Ich habe ein Entity Framework 4-Modell-First-Design. Ich erstelle einen ersten Entwurf meines Modells im Designer und alles war gut. Ich habe eine Datenbank zusammengestellt, generiert usw.

Später habe ich versucht, einer meiner vorhandenen Entitäten einen String-Skalar (Nullable = true) hinzuzufügen, und beim Kompilieren wird immer wieder diese Art von Fehler angezeigt:

Fehler 3004: Problem beim Zuordnen von Fragmenten ab Zeile 569: Für die Eigenschaften MyEntity.MyValue in Set MyEntities wurde keine Zuordnung angegeben. Eine Entität mit Schlüssel (PK) wird nicht umgeleitet, wenn: Entität vom Typ [MyEntities.MyEntity] ist

Ich muss die EDMX-Datei immer wieder manuell öffnen und das XML korrigieren, wenn ich Skalare hinzufüge.

Ideen, was los ist?

Jason Morse
quelle
Was genau korrigieren Sie?
Craig Stuntz
Ich habe den Entitätstyp manuell bearbeitet und Zuordnungen festgelegt.
Jason Morse

Antworten:

76

Habe seitdem festgestellt, dass ich nach dem Hinzufügen / Ändern / Löschen von Eigenschaften für meine Entitäten "Datenbank aus Modell generieren" muss, bevor ich kompiliere, da sonst 3004 Zuordnungsfehler auftreten.

Jason Morse
quelle
38
Das ist lächerlich! Ich erstelle mein Modell aus der Datenbank, nicht umgekehrt. Ich fange an, EF ziemlich fehlerhaft zu finden ... :(
Siewers
5
Ich habe festgestellt, dass die aktualisierte Version des Modells beim Löschen von Eigenschaften immer noch die alten Felder enthält. Ich muss die Felder manuell löschen. Hinzufügen dieser Informationen, falls es jemandem hilft.
Casey Margell
Ich erhalte diesen Fehler und es scheint genau so, als ob die Datenbank nicht mit dem Modell synchronisiert ist. Ich verwende jedoch Code First und kann "Datenbank aus Modell generieren" nicht. Ich habe es auf DropCreateDatabaseIfModelChanges eingerichtet, was aus irgendeinem Grund nicht mit dieser zusätzlichen Eigenschaft funktioniert: /
elwyn
Wenn Sie mit einer Datenbank beginnen und VS nicht zum Generieren der Datenbank aus Code anstelle von "Generieren" verwenden möchten, versuchen Sie "Modell aus Datenbank aktualisieren ..."
moonlightcheese
2
Ja, warum störe ich mit EF, hatte nie solche Probleme mit linq2sql
Chris Barry
43

Ich habe gerade die beleidigenden Tabellen aus dem Modell entfernt und sie dann wieder hinzugefügt, und alles war gut.

Allee19
quelle
5
Hat auch für mich gearbeitet. Datenbank zuerst.
Vbullinger
Dies tritt immer noch in EF5 auf, und dies war die Lösung, die für mich funktioniert hat. In meinem Fall hatte ich eine Spalte entfernt und der Tabelle eine Fremdschlüsselbeziehung hinzugefügt (falls dies jemandem hilft, herauszufinden, warum). Datenbank zuerst auch.
Crwth
Dies scheint die beste Lösung zu sein und ist leicht zu merken. Ich werde nur entfernen und von nun an hinzufügen, wenn ich die Datenbank ändere.
Nick
Danke, hat auch für mich gearbeitet. Löschte die Tabellen aus der edmx-Datei, aktualisierte das Modell zweimal aus der Datenbank (einmal zum Löschen und einmal zum Aktualisieren / Hinzufügen) und es funktionierte. Ist mir passiert, als ich bereits Modelle mit db aus einer vorhandenen Datenbank generiert und später meinen Junction-Tabellen Fremdschlüsseleinschränkungen hinzugefügt habe (Viele-zu-Viele-Beziehung). Nachdem ich die Junction-Tabellen aus der edmx-Datei entfernt hatte, war alles wieder normal
Chris Gong
Als ich diesen Fehler bekam, bemerkte ich auch public <datatype> MyColumnName1 { get; set; }(beachten Sie die 1 ), dass im generierten Modell angezeigt wurde.
OutstandingBill
31

Für diejenigen unter Ihnen, die ein Modell aus einer Datenbank erstellen, trat dieses Problem auf, nachdem ich Änderungen an meiner Datenbank vorgenommen hatte. Es ist passiert, als ich aus dem einen oder anderen Grund einen Feldnamen in der Datenbank geändert habe (ich denke, es passiert auch, wenn Sie einen Datentyp ändern).

Die Lösung bestand für mich darin, mit der rechten Maustaste auf den Arbeitsbereich zu klicken und "Modell aus Datenbank aktualisieren" auszuwählen. Dies sollte die Eigenschaften aus der Datenbank zu Ihrem Modell hinzufügen, entfernt jedoch NICHT Ihre alten Eigenschaften und diese geben Ihnen den 3004-Fehler.

Klicken Sie mit der rechten Maustaste auf den Arbeitsbereich und wählen Sie "Validieren". Dies sollte Ihnen eine Fehlerliste mit den fehlerhaften Eigenschaften geben. Sie können dann mit der rechten Maustaste auf jede fehlerhafte Eigenschaft klicken und sie manuell aus Ihrem Modell löschen.

Dies hat das Problem für mich behoben. Hoffe es hilft jemand anderem.

Jeff Johnson
quelle
Dies sollte Ihnen eine Fehlerliste mit den fehlerhaften Eigenschaften geben. Sie können dann mit der rechten Maustaste auf jede fehlerhafte Eigenschaft klicken und sie manuell aus Ihrem Modell löschen. Dies.
Joshua Drake
"Klicken Sie mit der rechten Maustaste auf den Arbeitsbereich und wählen Sie" Validieren ". Hmm, ich habe mit der rechten Maustaste auf das Diagramm geklickt, das VS aus der edmx-Datei generiert, und" Validieren "ausgewählt. Ich habe keine Fehler gesehen. Habe ich das Falsche bestätigt?
William Jockusch
Ich habe mein Problem gelöst, mein Problem ist aufgetreten, weil ich zuerst versucht habe, Code zu erstellen. Während ich vorher db forst benutzte. Als wenn fehlgeschlagen, fügte ich Tabellen in DB hinzu und aktualisierte Modelle und das Problem entstehen. Es gab 2 Felder, die ich entfernt habe und es hat funktioniert (Y)
Zia Ul Rehman Mughal
1
Komisch, dass dieses Problem immer noch besteht. Der Tipp "Validieren" hat bei mir funktioniert - ich musste eine Spalte manuell aus meinem Modell löschen, da dies bei der Aktualisierung aus der Datenbank nicht der Fall war.
Drew Kennedy
Ich denke, das Aktualisieren aus der Datenbank löscht niemals Dinge, sondern fügt nur Ihrem Modell hinzu.
Kai Hartmann
12

Wenn Sie Ihre Datenbank ändern möchten, ohne das gesamte Modell neu zu generieren oder Ihre Datenbank aus dem Modell neu zu erstellen, ist es meiner Meinung nach am einfachsten und sichersten, die Eigenschaften im EDMX-Diagramm über Visual Studio zu ändern und dann die Zuordnungen manuell anzupassen, die Visual Studio nicht bietet Zugriff auf.

Der Fehler gibt Ihnen eine Zeilennummer:

Problem beim Zuordnen von Fragmenten ab Zeile 569

Öffnen Sie einfach die edmx-Datei in einem Texteditor, gehen Sie zu dieser Zeile und es sollte ziemlich offensichtlich sein, was behoben werden muss. Es gibt einen Abschnitt, der so aussehen wird:

<EntityTypeMapping TypeName="YourModel.YourType">
  <MappingFragment StoreEntitySet="YourType">
    <ScalarProperty Name="PropertyName1" ColumnName="DatabaseColumn1" />
    <ScalarProperty Name="PropertyName2" ColumnName="DatabaseColumn2" />
    ...
  </MappingFragment>
</EntityTypeMapping>

<EntityType Name="YourTable">Stellen Sie einfach sicher, dass für jeden benötigten Eigenschafts- / Spaltennamen ein Knoten vorhanden ist und dass alle Eigenschaften auch im Abschnitt oben im edmx-Dokument aufgeführt sind

Phil
quelle
Dies war ein guter Anruf - obwohl es gefährlich sein kann, wenn Sie etwas
vermasseln
Dies löst das Problem, obwohl ich erstaunt bin, dass das Hinzufügen einer Spalte zur grafischen Ansicht des edmx dies nicht tut! Ich wünschte, ich könnte Ihnen mehr Punkte geben ...
Glenn Gordon
1

Wenn alle Ihre Abfragen in gespeicherten Prozeduren geschrieben sind und Sie nur versuchen, das Modell zu füllen, können Sie zu einem komplexen Typ wechseln, der für mich funktioniert hat.

So erstellen Sie einen komplexen Typ:

  1. Ändern Sie den Namen der Entity Generated-Klasse, mit der Sie Probleme haben, manuell in einen Namen, der in Ihrer edmx-Datei noch nicht verwendet wird.
  2. Wählen Sie das Fenster Modellbrowser aus und klicken Sie mit der rechten Maustaste auf einen neuen komplexen Typ.
  3. Kopieren Sie die Eigenschaften des Originalmodells in den komplexen Typ.
  4. Ordnen Sie Ihre gespeicherten Prozeduren dem komplexen Typ zu.

    Ich hoffe das hilft jemandem.


quelle
1

Eine andere Alternative, ohne die Tabelle aus dem Diagramm zu entfernen und erneut hinzuzufügen, ist die Verwendung der Option "Tabellenzuordnung".

  1. Gehe zum Modellbrowser
  2. Klicken Sie mit der rechten Maustaste auf den Tabellennamen.
  3. Wählen Sie Tablle Mapping
  4. Visual Studio zeigt ein Fenster mit EF-Eigenschaften an, die mit Tabellenspalten übereinstimmen / fehlen.
  5. Wählen Sie die entsprechende Spalte für die fehlende Eigenschaft aus

Geben Sie hier die Bildbeschreibung ein

Faiyaz
quelle
0

Ich habe das gleiche Problem erhalten, nachdem ich eine Eigenschaft in einer meiner Entitäten umbenannt habe.

Ich habe festgestellt, dass die Zuordnung zwischen der Eigenschaft meiner Entität und der entsprechenden Spalte in der Tabelle nicht festgelegt wurde.

Sie können dies mit dem Editor einstellen, indem Sie mit der rechten Maustaste auf die Entität im Modell klicken und "Tabellenzuordnung" auswählen. Stellen Sie sicher, dass die Eigenschaften einer Spalte in der Datenbank zugeordnet sind.

Bearbeiten: Ich musste auch meine tt-Datei erneut ausführen, um die neuen Klassen zu generieren. (Könnte gewesen sein, seit ich es in einem anderen Projekt habe?)

Zlazher
quelle
0

Nachdem Sie die XML-Datei (edmx) überprüft haben, verschieben Sie das Modell in ein anderes Projekt und stellen Sie fest, dass alles in Ordnung ist. Ich habe beschlossen, Visual Studio zu schließen und zu öffnen und erneut zu kompilieren. Dann verschwindet der Fehler.

Darío León
quelle