我使用“haward”数据库架构进行了应用迁移。
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");
}
}
使用此映射
public class CourseCategoryMapping : EntityTypeConfiguration<CourseCategory>
{
public CourseCategoryMapping()
{
ToTable("CourseCategories", "haward");
}
}
现在我想将架构从“haward”更改为“tr” 我不想用这个添加迁移,所以我想直接编辑迁移和映射的源代码。
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");
}
}
然后重新创建空数据库并发出命令update-database 但它告诉我还有待定的更改。
所以我所做的是发出add-migration命令来检查那些更改。即使没有迁移表,它似乎仍然可以检测到我的编辑(从“haward”到“tr”模式)。
保存模型更改的位置?以及如何直接编辑源代码并重新应用迁移?我知道它不可取,因为这就是迁移的目的。但是如果我只是处于早期开发阶段,我不想特意将这些变化弄得一团糟。
答案 0 :(得分:17)
TL; DR:这非常复杂 - 以后添加新迁移以解决问题会更容易。
实体框架迁移由两部分组成 - 代码和模型的哈希。模型的哈希用于确定模型是否已更改,因此是否需要任何新的迁移。
如果更改模型,则更改哈希值。此哈希存储在MigrationName.designer.cs文件中。您不能只编辑模型并更改migration.cs代码,因为模型不再与模型哈希匹配。您还需要为模型重新生成哈希值。
执行此操作的唯一方法是回滚数据库,并更新哈希值。
考虑您已应用3次迁移:
如果您想从Migration2开始应用更改......
Update-Database -TargetMigration Migration1 -Force
(注意 - 这可能会导致数据丢失,因此需要处理数据库的开发副本)Add-Migration xxxxxxxxxxx_Migration2
(使用迁移的全名,包括日期)。这只会更新designer.cs文件Update-Database -TargetMigration Migration2
Add-Migration xxxxxxxxxxx_Migration3
Update-Database
答案 1 :(得分:4)
我不确定这是否有助于其他人,但我可以通过执行以下操作来编辑和重新应用迁移:
我的迁移非常简单,所以我不确定这是否适合所有人。
享受!
答案 2 :(得分:0)
没有简便的方法,但是,如果您使用的是版本控制系统(Git,Subversion等),则还有另一种选择。有点辛苦,但它是唯一对我有用的。
考虑到您进行了以下迁移:
假设您要更改 Migration2 ,可以按照以下步骤操作:
Update-Database -TargetMigration Migration1 -Force
Add-Migration Migration2
(现在它将完全包含您想要的更改)Update-Database
Add-Migration Migration3
Update-Database