Wie überspringen bisherigen ef-Migrationen auf eine neue Datenbank, die enthält bereits diese änderungen?

Dem Szenario, das ich habe Probleme mit ist Sie wie folgt vor:

  1. Code First-Modell erstellt mit EF 4.1 und die entsprechende Datenbank erzeugt
  2. EF Upgrade auf 4.3.1 und eine migration Hinzugefügt (mit IgnoreChanges, da keine änderungen des Modells), um zu starten mit Migrationen (__MigrtionHistory Tabelle erstellt und EdmMetadata gelöscht) - nennen wir es mal 'InitialMigration'
  3. - Modell geändert wird, sagen wir eine neue Eigenschaft Hinzugefügt wird und eine migration fügt hinzu, dass eine entsprechende Spalte erzeugt wird (wir nennen dies eine 'NewPropertyMigration') und dann angewendet, um ein Dev-Datenbank (mit unserer version Zu Migrieren, um die Letzte Initialisierung Strategie)
  4. Wenn der code gefördert werden, um die Produktion der Datenbank vorhanden ist, wird aktualisiert mit neuen Spalte als erwartet
  5. Dann, wenn eine völlig neue Datenbank erstellt wird, in Dev und weil es ist basierend auf den aktuellen Modell wird es gehören die neue Spalte, nachdem es erstellt wurde, aber wenn die Initialisierung Strategie ist, es laufen immer noch findet "InitialMigration' und 'NewPropertyMigration' als "ausstehend" aber Sie scheitern beide, weil EdmMetadata ist nicht da, also nichts entfernt werden und die neue Spalte ist bereits vorhanden, so können nicht hinzufügen

Wenn ich __MigrationHistory Tabelle auf dieser neuen Datenbank enthält nur 'InitialCreate' - Eintrag so, dass würde erklären, warum die beiden anderen Migrationen gelten als angemeldet. Aber ich kann nicht sehen, wie Sie überhaupt in diese Tabelle ohne angewendet wird und zur gleichen Zeit, die Sie nicht wirklich brauchen, um angewendet werden, weil die Datenbank enthält bereits alle änderungen, die Sie abdecken.
Was bin ich?

Werde ich nur hinzufügen, dass es scheint ein bisschen misstrauisch, dass die Model-Spalte in 'InitialCreate' ist im Unterschied zu dem in 'NewPropertyMigration', obwohl Sie repräsentieren das gleiche Modell. Könnte das die Ursache sein?

Update:
Dies ist der code, den ich verwenden, um erstellen Sie neue Datenbank und wenden Sie eine beliebige Migrationen automatisch zur gleichen Zeit

public class MigratePaymentsToLatestVersion<TContext> : IDatabaseInitializer<TContext> where TContext : DbContext
{
public void InitializeDatabase(TContext context)
{
    //Create a brand new database if it doesn't exist but still apply any pending migrations
    context.Database.CreateIfNotExists();
    var migrator = new DbMigrator(configuration);
    migrator.Update();
}
}

Update 2: Einfachere Szenario zeigen sich die gleichen problem

Während der Untersuchung dieses weiteren habe ich in der Lage zu reproduzieren, die das Verhalten in eine viel einfachere Szenario beschrieben:

  1. Erstellen einfache Modell und Kontext
  2. In einem test-Anwendung fügen Sie eine Einheit - mit allen default-Einstellungen der Datenbank wird automatisch erstellt und Objekt Hinzugefügt
  3. Ermöglichen Migrationen - 'InitialCreate' migration generiert
  4. Update-Datenbank - Befehl gibt keine ausstehenden Migrationen, weil 'InitialCreation' ist bereits in der __MigrationHistory
  5. Datenbank löschen und re-test-Anwendung - Datenbank wird automatisch neu erstellt, wieder
  6. An dieser Stelle kann ich nicht fügen Sie zusätzliche Migrationen oder führen Sie update-Datenbank, weil 'InitialCreation' migration gesehen wird als "ausstehend" kann aber nicht angewendet werden, weil alle Elemente schon vorhanden sind
  • Wie hast du eine neue Datenbank erstellen?
Schreibe einen Kommentar