So Bearbeiten Sie zuvor angewendet migration ohne hinzufügen einer weiteren migration in EF code first
Ich habe eine angewandte migration mit "haward" db-schema.
public partial class CreateCourseCategoryTable : DbMigration
{
public override void Up()
{
CreateTable(
"haward.CourseCategories",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name = c.String(),
Code = c.String(),
})
.PrimaryKey(t => t.Id);
}
public override void Down()
{
DropTable("haward.CourseCategories");
}
}
mit dieser Zuordnung
public class CourseCategoryMapping : EntityTypeConfiguration<CourseCategory>
{
public CourseCategoryMapping()
{
ToTable("CourseCategories", "haward");
}
}
will ich jetzt ändern das schema von "haward" zu "tr"
Ich will nicht mit add-migration-mit diesem einen, so dachte ich, nur die Bearbeitung direkt der source-code der Migration und Mapping.
public partial class CreateCourseCategoryTable : DbMigration
{
public override void Up()
{
CreateTable(
"tr.CourseCategories",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name = c.String(),
Code = c.String(),
})
.PrimaryKey(t => t.Id);
}
public override void Down()
{
DropTable("tr.CourseCategories");
}
}
public class CourseCategoryMapping : EntityTypeConfiguration<CourseCategory>
{
public CourseCategoryMapping()
{
ToTable("CourseCategories", "tr");
}
}
erstellen Sie dann leere Datenbank und erteilt den Befehl update-Datenbank
aber Ihr zu sagen, dass ich immer noch mit ausstehenden änderungen.
also, was ich Tat, war ausgestellt, das add-migration-Befehl, um zu überprüfen, welche änderungen sind diese. und es scheint, wie es noch erkennt meine änderungen(von "haward" auf "tr" - schema) auch ohne die Migrationen Tabelle.
tun, wo das Modell die änderungen gespeichert? und wie Bearbeiten Sie direkt den source-code und übernehmen Sie die migration? Ich weiß, das ist nicht ratsam, weil es das ist, was migration ist. ich möchte aber nicht, um meine Geschichte dirty mit nur diesen änderungen speziell wenn ich nur am sehr frühen Entwicklungsstadium.
Du musst angemeldet sein, um einen Kommentar abzugeben.
TL;DR: Das ist sehr kompliziert - es ist viel einfacher nur zum hinzufügen einer neuen migration später um das problem zu beheben.
Einer Entity Framework-migration besteht aus zwei teilen - den code, und ein hash-Wert des Modells. Der hash-Wert von dem Modell wird verwendet, um zu bestimmen, ob das Modell sich geändert hat, und ob folglich alle neuen Migrationen erforderlich sind.
Wenn Sie das Modell ändern, ändern Sie den hash. Dieser hash wird gespeichert in der MigrationName.designer.cs-Datei. Sie können nicht ändern Sie einfach das Modell und ändern Sie die migration.cs-code, wie das Modell entspricht nicht mehr dem Modell-hash. Sie müssen auch die Regeneration des hash für das Modell.
Der einzige Weg, dies zu tun, ist Rollen Sie Ihre Datenbank zurück, und aktualisieren Sie den hash.
Meinung sind, Sie haben 3 Migrationen angewendet:
Wenn Sie sich bewerben möchten eine änderung von Migration2 ab...
Update-Database -TargetMigration Migration1 -Force
(NB - Dies kann zu Datenverlust führen, so dass die arbeiten auf einem Entwicklungs-Kopie Ihrer Datenbank)Add-Migration xxxxxxxxxxx_Migration2
(verwenden Sie den vollständigen Namen der migration, einschließlich des Datums). Dies wird nur aktualisieren Sie den designer.cs-DateiUpdate-Database -TargetMigration Migration2
Add-Migration xxxxxxxxxxx_Migration3
Update-Database
Update-Database -TargetMigration Migration1 -Force
ich kann das nicht Bearbeiten, da ist nur ein Zeichen.Ich bin mir nicht sicher, ob dies hilft jemand anderes, aber ich war in der Lage, zu Bearbeiten und re-gilt eine Wanderung durch ausführen der folgenden:
Meiner migration war ziemlich einfach, also ich bin mir nicht sicher, ob dies wird die Arbeit für alle.
Genießen!
Es gibt keine einfache Möglichkeit, dies zu tun, aber, wenn Sie mit einem Versionskontrollsystem (Git, Subversion, etc.), es gibt eine andere Möglichkeit. Es ist ein wenig mühselig, aber war die einzige, die für mich gearbeitet.
Wenn man bedenkt Sie haben folgende Migrationen:
Vorausgesetzt, Sie ändern möchten Migration2, könnten Sie den Schritten unten Folgen:
Update-Database -TargetMigration Migration1 -Force
Add-Migration Migration2
(es enthält nun genau die änderungen, die Sie wollen)Update-Database
Add-Migration Migration3
Update-Database