Was ist die beste Vorgehensweise, wenn sich das Datenbankschema im Entitätsrahmen ändert?

8

Ich verwende Entity Framework, um das ORM in .NET Projekt zu machen. Das Problem, mit dem ich konfrontiert bin, ist, dass beim Ändern des Datenbankschemas kein geeigneter Mechanismus zum Aktualisieren der EDMX-Datei vorhanden ist.

Zum Beispiel, wenn es eine Spalte namens "Gehalt" gibt, und ich es zu "EmpSalary" ändere, dann wenn ich die edmx von Visual Studio update und es zeigt mir zwei Spalten in der Klasse - Salary und EmpSalary.

Eine Möglichkeit, die ich herausgefunden habe, ist, die gesamte edmx-Datei zu löschen und neu zu erstellen. Was aber, wenn ich die Navigationseigenschaften im Modell manuell umbenannt habe? Ich werde sie verlieren und ich muss sie neu erschaffen, was jedes Mal eine schmerzhafte Sache ist.

Best Practices in diesem Bereich?

Danke

    
Jey Geethan 14.12.2009, 11:49
quelle

3 Antworten

4

Der Ansatz, den ich mit Linq To SQL verwendet habe (mit dem gleichen Problem), besteht darin, meine manuellen Änderungen in die XML-Datei zu schreiben, damit ich sie nach dem erneuten Generierungsvorgang erneut anwenden kann. Sie können eine Klassenbibliothek zum Bearbeiten der EDMX-Datei mit Linq To Xsd erstellen. Siehe Ссылка für ein bisschen mehr Details

    
mcintyre321 14.12.2009 12:03
quelle
2

Im EF1-Designer ist die Funktion "Aktualisieren des Modells von der Datenbank" für viele Situationen unterbrochen. Ich arbeite jetzt seit ungefähr einem Jahr mit EF1. Probleme bei der Verwendung des EF1-Designers haben mich einige Tage gekostet. Daher ist es für mich die beste Vorgehensweise, das EDMX-XML manuell zu bearbeiten.

Erstellen Sie für schwierige Aufgaben ein neues Modell, das die neuen Tabellen / Spalten / Beziehungen / Ansichten enthält, und fügen Sie dann den XML-Code aus dem neuen EDMX in Ihre vorhandene XML-Datei ein.

Einige Dinge, die es bricht, wenn Sie "Update Model from Database" verwenden

  1. Überschreibt alle manuellen Änderungen, die Sie vornehmen Machen Sie das XML.
  2. Kann die Standardwerte nicht verarbeiten Die Datenbank - besteht auf Ihren Entitäten Geben Sie Werte für Felder an, die mit Standardwert gefüllt.
  3. Erzeugt lächerliche zusammengesetzte Schlüssel für Ansichten und selbst wenn Sie behoben haben die Aussicht, vernünftige Schlüssel zu haben kommentiert das Ihre richtig Version und erstellt eine neue Version mit seinen eigenen komischen Tasten!
  4. Legt nicht alle Attribute für fest Spalten, die zu Tabellen hinzugefügt werden, die festgelegt werden wenn Sie die Tabelle von erstellen Scratch (zB Unicode, MaxLength, FixedLength)

Ich bin sicher, dass es mehr gibt, aber das war genug für mich, damit aufzuhören.

    
Dave R 16.12.2009 14:07
quelle
2

Ich habe einige ziemlich große Modelle, die ich bei der Aktualisierung behilflich bin. Das Wichtigste, was mir beim Befehl "Modell von Assistenten aktualisieren" in EF v1 aufgefallen ist, ist, dass ALLES NICHT aus der CSDL gelöscht wird. Die SSDL könnte zu 100% korrekt sein (und ist in den meisten Fällen). Es gibt also zwei Möglichkeiten, damit umzugehen.

1) Ändere / skript die XML-Änderungen. 2) Nehmen Sie die Änderungen manuell im Designer vor.

Ich habe mich sehr bemüht, Methode 1 zum Laufen zu bringen. Es ist nicht einfach, aber im Grunde ist der beste Hinweis, den ich Ihnen geben kann, die SSDL mit der CSDL-Version zu vergleichen, und Sie kommen sehr nahe (wenn Sie nur über Spalten sprechen).

Das Schlimmste ist, wenn Sie eine Tabelle umbenennen. Dann ist jede FK-Beziehung, die auf dieser Tabelle in der CSDL erstellt wurde, im Wesentlichen dupliziert (weil eine Umbenennung wirklich ein Löschen / Erstellen ist, aber dann merke, dass der Assistent nichts in der CSDL löscht: -))

Also, der einfachste Tipp, den ich habe. Nehmen Sie Ihre Änderungen über den Aktualisierungsassistenten vor. Kompilieren Sie dann nur das EDMX-Projekt (den Designer geöffnet lassen). Danach klicken Sie einfach auf jede Fehlermeldung und "beheben Sie den Fehler".

Die Behebung des Fehlers hängt vom jeweiligen Szenario ab. Wenn es sich um doppelte Spalten handelt, klicken Sie mit der rechten Maustaste auf den falschen Spaltennamen und klicken Sie auf Löschen. Wenn es eine schlechte FK ist, klicken Sie mit der rechten Maustaste darauf und löschen Sie sie.

Ich erinnere mich an jemanden im Codeplex, der versuchte, den Update-Assistenten mit T4-Templates zu machen (was sie jetzt mit .NET v4 verwenden). Ich denke nur, es ist viel schwieriger, als es zuerst klingt. Ich hatte versucht, es zu tun, und als ich zu Szenarien wie 1 kam. * * .. 1 Multiplizität, die Xml und Code in der T4-Generator wurde wirklich beängstigend. Stattdessen greifen wir einfach auf die Methode "Fehler beheben" zurück.

    
jwendl 20.12.2009 18:45
quelle