2012-06-24 13 views
6

Wenn ich eine neue Tabelle hinzufügen, die einige Beziehungen zu meiner Datenbank hat und dann Add-Migration ausführen, sehe ich, dass der Code in der Up Methode generiert wird, um die Tabelle und ihre Beziehungen hinzuzufügen. Allerdings bevorzuge ich die Beziehung mit der fließenden API in der OnModelCreating Methode zu definieren. Wie interagieren diese beiden Methoden? Kann ich den Code aus der Up-Methode löschen, die zum Beispiel die Beziehung definiert?Wie hängen OnModelCreating und nicht automatische Migrationen zusammen?

Antwort

11

Jeder von ihnen hat ganz anderen Zweck:

  • OnModelCreating für Inline fließend-API-Definitionen des Modells verwendet wird. Diese Definitionen bilden zusammen mit Standardkonventionen, Datenannotationen und Konfigurationsklassen die vollständige Definition des Modells.
  • explizite Migration definiert, was zur Datenbank getan werden muss, um es in die Form von Ihrem aktuellen Modell

Nun, wie die beide beziehen erforderlich zu migrieren? Die Migration verfügt über zwei Eingaben, mit denen Migrationscode generiert wird (Methoden Up und Down). Eine Eingabe ist der letzte Migrationsdatensatz, der in der Tabelle __MigrationHistory in der Datenbank gespeichert ist. Dieser Datensatz enthält ein serialisiertes Modell, das die Datenbank darstellt. Diese Eingabe ist optional, da die erste Migration ohne sie ausgeführt werden muss. Die zweite Eingabe ist obligatorisch - Ihr aktuelles Modell wird durch Ausführen des Codes in Ihrer aktuellen Baugruppe abgerufen =>Add-Migration führt Ihre OnModelCreating aus, um das aktuelle Modell abzurufen und es mit dem aus der Datenbank abgerufenen Modell zu vergleichen. Das Ergebnis des Vergleichs ist der Inhalt der Methoden Up und Down in der expliziten Migration.

+1

Danke! Also, wenn ich richtig verstehe, wird der Code in der "Up" -Methode die Definitionen widerspiegeln, die in der "OnModelCreating" -Methode eingestellt sind (vorausgesetzt, Sie haben eine Migration hinzugefügt, nachdem Sie natürlich die fließende API-Definition geschrieben haben). Man muss diese reflektierten Definitionen nicht von "Up" entfernen. – Dabblernl

+0

Ja das ist richtig. –