2014-04-01 2 views
5

Das Projekt, an dem ich arbeite, verwendet Entity Framework 4.3 und Datenmigrationen, um das Schema auf dem neuesten Stand zu halten. Im Laufe des Projekts ist der Migrationsordner gewachsen und verfügt nun über 600 Dateien. Das ist riesig. Wir haben jetzt eine Binärdatei, die aufgrund aller Migrations-Metadaten über 12 MB ist.Was ist der beste Weg, um alle vorhandenen Entity Framework-Migrationen zu reduzieren?

Ich möchte alle diese in einer Migration zusammenfassen und neu beginnen. Meine Bedenken sind:

  1. Ist das möglich oder wird es Probleme mit dem Migrationsverlauf verursachen, wenn ich Migrationen entferne?
  2. Gibt es Anleitungen, wie man das macht?

Antwort

5

Erstens: Ich empfehle, dass Sie Ihre Migrationen in einer separaten Assembly speichern, damit sie nicht mit der Anwendung veröffentlicht werden müssen. Es könnte eine einfache Konsolenanwendung sein, die die Migrationen anwendet, oder eine winforms-GUI, die Skripte generiert. Aber es gibt keinen Grund dafür, dass es mit der App imo bereitgestellt wird.

Zweitens: Wenn Sie verstehen, dass Sie die Möglichkeit eines Rollbacks auf frühere Versionen aufgeben, können Sie einfach alle vorherigen Migrationen aus dem Projekt ausschließen und dann eine neue erstellen, die dann eine Datenbank erstellen kann widerspiegelt dein aktuelles Modell. Das würde als neuer Ausgangspunkt dienen. Denken Sie daran, dass EF nicht immer Code erzeugt, um bei einer Migration alles zu tun, was Sie möchten. Sie könnten also einen handgeschriebenen Migrationscode in anderen Migrationen haben, den Sie einziehen müssten.

+0

Fantastische Idee, die Migrationen auf eine andere Baugruppe zu verschieben. Weißt du, ob das mit EF 4 möglich ist? Ich dachte, die Migrationen müssten im selben Projekt wie der DataContext leben. –

+1

Die von DbMigrationsConfiguration abgeleitete Klasse muss nur Ihren DbContext sehen können. Zwei Wege, um darüber zu gehen. Sie könnten einen separaten Kontext im Migrationsprojekt haben oder Sie könnten einen Verweis auf Ihre Datenschicht in Ihrem Migrationsprojekt hinzufügen, damit der Kontext dort angezeigt wird. Der Ansatz, den ich anwende, besteht darin, meine Entity- und Entity-Mapping-Klassen in ihren eigenen separaten Projekten zu behalten. In meinem Migrations-Projekt habe ich einen speziellen Kontext, der keine DbSets definiert, sondern lädt alle meine Entity-Mapping-Klassen dynamisch mit 'modelBuilder.Configuration.AddFromAssembly()' –

+0

Ich mag die Trennung, die Sie gefunden haben. Ermöglichen dies Entwicklern weiterhin die Verwendung von Add-Migration und Enable-Migration von der Konsole aus? –

0

Nicht sicher frühere Versionen, aber wenn Sie suchen hier nach der gleichen Lösung für EF Core. Sie sollten in der Lage sein, den ModelSnapshot einfach zu löschen und die Migration erneut auszuführen, um ein neues Blatt zu erstellen.

Verwandte Themen