2017-04-27 3 views
0

Ich habe ein ASP.NET MVC-Projekt mit EF-Code zuerst und Migrationen.Migration mit Entity Framework 6 Code zuerst

Ich versuche, eine neue Eigenschaft zu einer Klasse hinzuzufügen. Dazu erstelle ich den Migrationscode, um die spezifische Spalte in der Tabelle zu dieser Klasse hinzuzufügen.

Meine Migration Code ist folgende:

public partial class Add_DataRequisicao_to_BiblRequisicao : DbMigration 
{ 
    public override void Up() 
    { 
     AddColumn("dbo.BiblRequisicoes", "DataRequisicao", c => c.String(nullable: false, defaultValue: "01/01/1900 00:00")); 
    } 

    public override void Down() 
    { 
     DropColumn("dbo.BiblRequisicoes", "DataRequisicao"); 
    } 
} 

und die Eigenschaft der Klasse hinzuzufügen, wird die folgende:

[Required] 
[Display(Name = "Data Requisição")] 
public string DataRequisicao { get; set; } 

Als ich das Projekt zu veröffentlichen und der Projekt-Website gehen, Ich erhalte die folgende Fehlermeldung:

Die Datenbank konnte nicht aktualisiert werden, um dem aktuellen Modell zu entsprechen, da ausstehende c Änderungen und automatische Migration ist deaktiviert. Schreiben Sie die ausstehenden Modelländerungen in eine codebasierte Migration oder aktivieren Sie die automatische Migration. Setzen Sie DbMigrationsConfiguration.AutomaticMigrationsEnabled auf true, um die automatische Migration zu aktivieren.

Untersuchen der Datenbank, ich sehe, dass die Migration mit Erfolg ausgeführt wurde, da die Spalte erstellt wurde. In der Migrationstabelle gibt es auch einen neuen Eintrag, der angibt, dass die Migration ausgeführt wurde.

Die Migration Eintrag:

MigrationId: 201704261436437_Add_DataRequisicao_to_BiblRequisicao 
ContextKey: WebAppInvestigacaoMultimedia.Migrations.Configuration 
Model: 0x1F8B0800000... 
ProductVersion: 6.1.3-40302 

Ich verstehe nicht, warum ich die Fehlermeldung erhalten, wenn die Migration mit Erfolg lief und den Namen und die Art der Immobilie ist das gleiche wie die Add-Spalte der Tabelle.

+0

Wie haben Sie diese Migration erstellt? Haben Sie Add-Migration verwendet oder haben Sie die Klasse selbst hinzugefügt? – Gimly

+0

Haben Sie automatische oder codebasierte Migrationen verwendet? Von 2 Methoden, die im Codebeispiel vorgestellt werden, verwende ich 'Add-Migrations', was eine code-basierte Migration bedeutet. Verwenden Sie das Flag "-Verbose -Script" in der Package Manager-Konsole, um DB-Skripts und Schritte zur Durchführung des Migrationsprozesses anzuzeigen. –

+0

@Gimly Ich verwende Add-Migration – miguelbgouveia

Antwort

1

Dieser Fehler wird in der Regel auf Änderungen an dem Modell verbunden, die zu einem Migrationsskript bisher noch nicht hinzugefügt haben.

Wenn Sie sich den Ordner mit Ihren Migrationen ansehen, sollten Sie resx Dateien haben, diese Dateien enthalten einen "Snapshot" des Modells zum Zeitpunkt der Migration. Es weiß daher, ob Änderungen am Modell vorgenommen wurden und lässt keine Update-Datenbank zu, wenn Änderungen ausstehen.

Um das Problem zu beheben, müssen Sie entweder Änderungen rückgängig machen, die Sie an dem Modell seit der letzten Migration vorgenommen haben, oder eine neue Migration mit Add-Migration erstellen und anschließend Update-Database durchführen.

Wenn Sie mit einem Team arbeiten, passieren diese Fragen manchmal, wenn Sie und andere haben Änderungen an dem Modell oder erstellt Migrationen gemacht. Überprüfen Sie this interesting MSDN article, um ein paar Einblicke zu erhalten, wie diese Probleme genutzt werden können.

+0

Das Problem bestand darin, dass ich den Migrationscode über den Befehl Add-Migration vor dem Hinzufügen der Klasseneigenschaft erstellte. Das Erstellen der Eigenschaft löst zuerst mein Problem. – miguelbgouveia

+0

Das Migrationstool ist ziemlich leistungsstark. Es erstellt direkt gute Migrationsskripte für die meisten Änderungen, die Sie am Modell vornehmen. Seien Sie vorsichtig bei destruktiven Änderungen, Sie könnten jedoch Daten verlieren. Viel Glück. – Gimly

Verwandte Themen