Entity Framework erstellt eine leere Migration, besteht jedoch darauf, dass mein Modell anders ist

Heute ist ein trauriger Tag. Als erstes habe ich heute eine EF-Ausnahme gesehen, die sagte, dass "Das Modell, das den Kontext 'DomainContext' unterstützt, hat sich seit der Erstellung der Datenbank geändert.". Es ist kurz vor Mitternacht und ich sehe immer noch diesen Fehler. Dies ist das Ende meiner Karriere - (

Ich bin mir ziemlich sicher, dass sich am Modell nichts geändert hat, aber der Fehler ist aufgetreten. Ich habe versucht, eine neue Migration zu erstellen. Sie ist leer ausgefallen:

public void Up()
{
}
public void Down()
{
}

Das Anwenden dieser Migration hat nichts gebracht - der Fehler blieb bestehen. Ich habe einen allgemeinen Vorschlag verwendet, um den Initialisierer auf Null zu setzen:

Database.SetInitializer<DomainContext>(null);

Und es hat den Fehler behoben, wenn ich auf die Datenbank zugreife. Das stört mich jedoch sehr - wenn ich versuche, Migrationen über Code auszuführen, wird erneut ein ähnlicher Fehler angezeigt:

var configuration = new Migrations.Configuration();

configuration.TargetDatabase = new DbConnectionInfo("correct connection string", "System.Data.SqlClient");

var migrator = new DbMigrator(configuration);

migrator.Update(); // <<-- exception is thrown here

Der Ausnahmewurf sieht folgendermaßen aus:System.Data.Entity.Migrations.Infrastructure.AutomaticMigrationsDisabledException: Datenbank kann nicht aktualisiert werden, um dem aktuellen Modell zu entsprechen, da Änderungen anstehen und die automatische Migration deaktiviert ist. Schreiben Sie die ausstehenden Modelländerungen entweder in eine codebasierte Migration oder aktivieren Sie die automatische Migration. Setzen Sie DbMigrationsConfiguration.AutomaticMigrationsEnabled auf true, um die automatische Migration zu aktivieren.

Ich habe auf EF 6.1 aktualisiert (war vor 6.0.2), aber das machte keinen Unterschied.

Eine andere Sache, die mich stört, dass ich Migrationen über Nuget Console ausführen kann:

Update-Database

Läuft gut und gibt keine Probleme. Aber wenn ich den DB-Initialisierer so einstelle, dass Migrationen automatisch ausgeführt werden:

var initializer = new MigrateDatabaseToLatestVersion<DomainContext, Migrations.Configuration>();
Database.SetInitializer(initializer);
var domainContext = new DomainContext();
domainContext.Database.Initialize(true); // <<-- this throws exception

Die Datenbank kann nicht aktualisiert werden, um mit dem aktuellen Modell übereinzustimmen, da Änderungen anstehen und die automatische Migration deaktiviert ist. Schreiben Sie die ausstehenden Modelländerungen entweder in eine codebasierte Migration oder aktivieren Sie die automatische Migration. Setzen Sie DbMigrationsConfiguration.AutomaticMigrationsEnabled auf true, um die automatische Migration zu aktivieren.

Die eigentliche Frage ist, warum EF unterschiedliche Hashes für Modelle verwendet, wenn es über die Nuget-Konsole und den Migrations-DB-Initialisierer ausgeführt wird. Wie kann ich herausfinden, was anders ist (Modell vom DB-Status)? Und wie behebe ich das, damit ich keine Hacks verwenden muss (weise db-initaliser null zu)?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage