MigrateDatabaseToLatestVersion nicht ausgeführt

Ich kann nicht herausfinden, warum meine Letzte migration ist nicht immer automatisch ausgeführt beim starten der Anwendung (oder zumindest bei dem erstmaligen Zugang wird der Kontext der Datenbank). Ich verwendet, um zu laufen update-Datenbank manuell in der Entwicklung, aber ich möchte, um zu testen, ob es automatisch aktualisiert werden soll auf meinem gehosteten test-Umgebung.

In Application_Start():

Database.SetInitializer<FepazoContext>(
    new MigrateDatabaseToLatestVersion<FepazoContext, FepazoConfiguration>())

In FepazoConfiguration:

internal sealed class FepazoConfiguration : 
    DbMigrationsConfiguration<Fepazo.Models.FepazoContext>
{
    public FepazoConfiguration()
    {
        AutomaticMigrationsEnabled = true;
    }
}

Ich noch Hinzugefügt, das an den Konstruktor von FepazoContext:

public FepazoContext() : base("DefaultConnection")
{
    Database.Initialize(false);
}

Einige zusätzliche Informationen:

  • Die migration automatisch erstellt wurde, durch add-migration und sieht ok.
  • Wenn ich die Abfrage der __MigrationHistory Tisch, ich kann sehen, dass die migration ist noch nicht 'aufgenommen' wie Sie ausgeführt werden.
  • Ich habe überprüft, dass die Initialisierung oder die AutomaticMigrationsEnabled Einstellung nicht überschrieben Web.config-Datei.
  • Haltepunkte in FepazoContext Konstruktor und die FepazoConfiguration sind erste Treffer.

Bin ich etwas vergessen ? Kann ich tiefer Graben, um herauszufinden, wo es schief geht ?

Updates

Vorbei True zu Database.Initialize zu versuchen und zu zwingen, die migration hat auch keine Wirkung. Database.CompatibleWithModel(true) gibt false zurück - damit das system erkennt, es ist ein Unterschied, aber es funktioniert nicht führen Sie die anstehende migration!

public FepazoContext() : base("DefaultConnection")
{
    if (!Database.CompatibleWithModel(true))
    {
        //This is executed (each time the code enters)
        Database.Initialize(true);
    }
}

Abhilfe

Als workaround rufe ich DbMigrator.Update() ausdrücklich Recht nach der Einstellung der Initialisierung. Dass der trick funktioniert, obwohl ich würde immer noch gerne wissen, warum es funktioniert nicht automatisch...

protected void Application_Start()
{
    //<...>
    Database.SetInitializer<FepazoContext>(
        new MigrateDatabaseToLatestVersion<FepazoContext, FepazoConfiguration>());
    var dbMigrator = new DbMigrator(new FepazoConfiguration());
    dbMigrator.Update();
    //<...>
}

InformationsquelleAutor Vincent Sels | 2013-08-31

Schreibe einen Kommentar