Es ist scheinbar unmöglich, das Entity Framework-Datenmodell vollständig aus der Datenbank zu ersetzen

8

Grundsätzlich habe ich eine SQL Server-Datenbank, deren Schema sich ändert. Wenn dies passiert, muss ich das EF-Datenmodell aktualisieren. Dies ist in Ordnung, wenn ich nur eine Tabelle hinzugefügt oder gelöscht habe: Gehe zum Designer, finde "Update Model from Database ..." von einem der verschiedenen Orte, an denen es existiert, und gehe durch den Assistenten.

Leider lässt mich der Assistent nicht nur das gesamte Modell aus der Datenbank ersetzen. Es kann auch immer nur eine Sache machen. Wenn ich also die unglückliche Entscheidung treffe, mehrere Schemaänderungen vorzunehmen, und noch schlimmer, vergiss, was ich getan habe: Ich muss mehrere Schritte ausführen, um Tabellen aus dem Modell hinzuzufügen, zu aktualisieren und zu löschen.

Das ist offensichtlich umständlich. Da es an einem besseren Verfahren mangelt, muss ich das Modell wegpusten und alle Schritte durchlaufen, um es aus der Datenbank neu zu erstellen. Crap: Ich habe die Verbindungszeichenfolge in der Konfigurationsdatei gelassen. Jetzt muss ich das löschen und den Wizard über starten oder sonst wird es nicht den gleichen Entity-Klassennamen erzeugen und jetzt wird mein gesamter Code kaputt gehen.

Warum kann das nicht einfach das Modell für mich wegblasen und aus der Datenbank erzeugen? Noch wichtiger, warum hat noch niemand diese Frage gestellt? Was machen die Leute?

    
Sam Rueby 24.02.2012, 23:03
quelle

3 Antworten

1

Sie könnten ein cmd-Skript schreiben, das es über die Kommandozeile macht:

  

Ссылка

    
mindandmedia 24.02.2012, 23:12
quelle
4

Wenn Sie das Modell wegblasen und ersetzen möchten, ist es am einfachsten, es einfach zu löschen und neu zu erstellen. Wenn Sie jedoch eine Anpassung des Modells vorgenommen haben, werden Sie dies natürlich auch verlieren.

Als Workaround, um kontinuierliche inkrementelle Schemaänderungen (und Änderungen an beiden Enden) zu ermöglichen, schrieb ich ein Dienstprogramm, das die Datenbank mit der SSDL-Schicht des EF-Modells vergleicht, und die SSDL mit der CSDL-Schicht, zeigen die Diffs und erlauben, dass einzelne (oder alle) Unterschiede überkreuzt werden.

Sie können es hier in Aktion sehen: Ссылка ... und wenn Sie es ausprobieren möchten kann es von Ссылка

herunterladen     
KristoferA 25.02.2012 02:29
quelle
0

Ihre beiden Anforderungen stehen im Widerspruch zueinander. Sie möchten das gesamte Modell in die Luft jagen, aber gleichzeitig möchten Sie Ihre Anpassung beibehalten. Die erste Situation war in Linq-to-Sql Designer möglich, aber jede Änderung ging jedes Mal verloren, wenn Sie das Modell aktualisierten. Für EF Designer entschied sich MS dafür, einen zweiten Ansatz zu verwenden, bei dem Designer fast nie etwas berühren, was bereits in Ihren CSDL-Räumen (Entitäten) vorhanden ist, sondern nur das Speichermodell ändert und Sie Modell-Bit (im Designer) nach einigen Änderungen manuell modifizieren müssen. Ich habe beide Designer benutzt und muss sagen, dass Produktivität und Benutzerfreundlichkeit des zweiten Ansatzes viel besser sind. Das ist auch der Grund, warum sich die Leute normalerweise nicht darüber beschweren.

Diejenigen, die sich beschweren, tun normalerweise entweder:

  • Kaufen Sie ein Werkzeug (wie ein großes, das von @Kristofer referenziert wird), weil MS alles, was mit dem Zusammenführen von Änderungen auf verschiedenen Granularitätsstufen zusammenhängt, komplett übersprungen hat und es in naher Zukunft nicht besser sein wird
  • Schreiben Sie ein Skript oder ein benutzerdefiniertes Tool, das alle Änderungen jedes Mal zurücksetzt, wenn das ganze Modell gelöscht wird (das war eine Methode, die wir mit Linq-to-sql verwendet haben)
  • Verwenden Sie keinen Designer und verwalten Sie XML nicht manuell
  • Gehe zu Codemapping statt EDMX
Ladislav Mrnka 26.02.2012 13:26
quelle