Wie kann ein Entitätsmodell nach Änderungen der Datenbankstruktur korrekt aktualisiert werden?

entity-framework entity-model

Frage

Ich habe einige Änderungen an der Tabellenstruktur und insbesondere an den Beziehungen zwischen Tabellen in meiner SQL Server-Datenbank vorgenommen. Jetzt möchte ich mein Entity-Modell basierend auf dieser neuen Datenbankstruktur aktualisieren.

Rechtsklick auf die edmx-Datei finde ich die Option "Modell aus Datenbank aktualisieren". Wenn ich dies jedoch mache, bekomme ich eine Art 50% iges Update: Die neuen Spalten werden in den Entity-Klassen angezeigt, aber ich bin verwirrt über viele Navigationseigenschaften, die im Modell noch vorhanden sind, obwohl die entsprechenden Fremdschlüsselbeziehungen nicht mehr vorhanden sind die Datenbank. ( Bearbeiten: Auch Mitglieder in den Modellklassen werden nicht gelöscht, obwohl die Spalten in der Datenbank gelöscht wurden.)

Mache ich etwas falsch? Oder gibt es eine andere Option zum Aktualisieren des Modells, einschließlich Löschen der Navigationseigenschaften? Oder muss ich diese Navigationseigenschaften manuell in den Modelldateien löschen?

Ich verwende Entity Framework Version 1 (VS 2008 SP1).

Danke für die Hilfe im Voraus!

Akzeptierte Antwort

Sie machen das Richtige, um sie zu aktualisieren. Nachdem Sie ein Modell automatisch generiert haben, können Sie es jedoch anpassen. Beim Update möchte der EF-Designer alle von Ihnen vorgenommenen Anpassungen versuchen und beibehalten. Das muss erraten, und es ist nicht immer richtig. Ich werde versuchen und zu erklären, wie es erraten wird, da dies Ihnen helfen könnte.

Ihr EDMX besteht aus drei Teilen:

  • Client-Schema (CSDL)
  • Speicherschema (SSDL)
  • Zuordnung zwischen Client und Geschäft (MSL)

Der Designer "besitzt" das Ladenschema. Bei jedem Update wird dies fast von Grund auf neu erstellt. Obwohl es möglich ist, das Geschäftsschema durch manuelles Bearbeiten der SSDL anzupassen, gehen diese Änderungen beim Aktualisieren des Modells häufig verloren.

Sie "besitzen" hingegen das Client-Schema. Der Designer generiert das Clientschema bei der ersten Ausführung für Sie und generiert ein Clientschema für neu importierte Datenbank-Metadatenobjekte, z. B. neu zugeordnete Tabellen oder Spalten. Sobald das Client-Schema für ein Objekt erstellt wurde, wird es normalerweise nicht neu erstellt, da der Designer versucht, Ihre Anpassungen beizubehalten. Wenn Sie daher Ihre Datenbank so ändern, dass sie sich auf das Client-Schema auswirkt, müssen Sie das Client-Schema manuell aktualisieren. Sie können dies im GUI-Designer oder manuell im XML-Code durchführen.

In Ihrem Fall wäre es am einfachsten, die Navigation im GUI-Designer auszuwählen und zu löschen. Dies setzt voraus, dass auf beiden Seiten der Beziehung keine ID-Eigenschaft mehr für die Navigation in der Datenbank vorhanden ist.


Beliebte Antwort

Wenn Sie mit einem Entitätsmodell arbeiten, das nicht angepasst wurde und Sie einfach Änderungen aus Ihrer SQL-Datenbank in Ihr VS-Projekt übernehmen müssen, finde ich es am einfachsten, das Entitätsmodell zu löschen und aus derselben Quelle zu regenerieren. Auf diese Weise wird in allen drei Teilen Ihres EDMX angezeigt, was sich in Ihrer Datenbank befindet. Ich habe vorher die Option "Modell aus Datenbank aktualisieren" verwendet und dann den XML / Designer bearbeitet und fand es langwierig und zeitaufwendig, wenn mit großen Datenbanken gearbeitet wird. Verstehen Sie mich nicht falsch, es funktioniert zu 100%, aber es ist einfach viel schneller, um Ihr Modell auf dem neuesten Stand zu halten, indem Sie es neu erstellen. Selbst wenn Sie nachher noch einige LINQ-zu-SQL-Abfragen bearbeiten müssen, finde ich es besser, LINQ-zu-SQL-Abfragen zu bearbeiten als EDMX-Modelle. Das musste ich allerdings noch nicht tun. WICHTIG: Stellen Sie sicher, dass Sie Ihr Modell mit den gleichen Einstellungen wie zuvor neu erstellen. Wenn Sie beispielsweise das Modell erstellt haben, ohne die Objektnamen zuvor zu mehrfachisieren, tun Sie dasselbe.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum