Entity framework 如何编辑以前应用的迁移而不首先在EF代码中添加另一个迁移
我有一个使用“haward”db模式的应用迁移Entity framework 如何编辑以前应用的迁移而不首先在EF代码中添加另一个迁移,entity-framework,ef-code-first,entity-framework-6,entity-framework-migrations,Entity Framework,Ef Code First,Entity Framework 6,Entity Framework Migrations,我有一个使用“haward”db模式的应用迁移 public partial class CreateCourseCategoryTable : DbMigration { public override void Up() { CreateTable( "haward.CourseCategories", c => new
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");
}
}
公共类课程类别映射:EntityTypeConfiguration
{
公共课程类别映射()
{
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");
}
}
public分部类CreateCourseCategoryTable:DbMigration
{
公共覆盖作废()
{
创建表(
“tr.CourseCategories”,
c=>新的
{
Id=c.Int(可为空:false,标识:true),
Name=c.String(),
Code=c.String(),
})
.PrimaryKey(t=>t.Id);
}
公共覆盖无效向下()
{
升降台(“tr.CourseCategories”);
}
}
公共类课程类别映射:EntityTypeConfiguration
{
公共课程类别映射()
{
ToTable(“课程分类”、“tr”);
}
}
然后重新创建空数据库并发出更新数据库命令
但它告诉我,我仍然有悬而未决的变化
因此,我所做的是发出addmigration命令来检查哪些更改是这些更改。即使没有migrations表,它似乎仍能检测到我的编辑(从“haward”模式到“tr”模式)
在哪里保存模型更改?如何直接编辑源代码并重新应用迁移?我知道这是不可取的,因为移民就是为了这个。但我不想因为这些变化而玷污我的历史,特别是如果我只是处于早期发展阶段的话;DR:这非常复杂-稍后只需添加一个新的迁移来纠正问题就容易多了 实体框架迁移由两部分组成——代码和模型哈希。模型的散列用于确定模型是否已更改,从而确定是否需要任何新的迁移 如果更改模型,则更改哈希。此哈希存储在MigrationName.designer.cs文件中。您不能只编辑模型并更改migration.cs代码,因为模型不再与模型哈希匹配。您还需要重新生成模型的哈希 唯一的方法是回滚数据库并更新哈希 假设您应用了3次迁移:
- 迁移1
- 迁移2
- 迁移3
- 回滚到迁移1:
(注意-这可能会导致数据丢失,因此请使用数据库的开发副本)更新数据库-TargetMigration Migration1-Force
- 使您的模型代码与迁移2所需的匹配,并手动更新迁移2的代码
- 为迁移2重新生成设计器文件:
(使用迁移的全名,包括日期)。这将仅更新designer.cs文件添加迁移xxxxxxxxxx\u迁移2
- 应用迁移2:
更新数据库-TargetMigration迁移2
- 对迁移代码重新应用任何模型更改3
- 为迁移3重新生成设计器文件:
添加迁移xxxxxxxxxx\u迁移3
- 将数据库更新为最新版本:
更新数据库
享受吧 实现这一点没有简单的方法,但是,如果您使用的是版本控制系统(Git、Subversion等),那么还有另一种选择。这是一个有点辛苦,但是唯一一个为我工作 考虑到您有以下迁移:
- 迁移1
- 迁移2
- 迁移3
更新数据库-targetmigration1-Force
添加Migration2
(它现在将完全包含您想要的更改)更新数据库
添加迁移3
更新数据库