gpt4 book ai didi

entity-framework - 如何编辑以前应用的迁移而不先在 EF 代码中添加另一个迁移

转载 作者:行者123 更新时间:2023-12-03 23:39:14 25 4
gpt4 key购买 nike

我有一个使用“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”模式)。

模型更改保存在哪里?以及如何直接编辑源代码并重新应用迁移?我知道这是不可取的,因为这就是迁移的目的。但如果我只是处于早期开发阶段,我不想让我的历史只因这些变化而变得肮脏。

最佳答案

TL;博士:这非常复杂 - 稍后添加新迁移以纠正问题要容易得多。

Entity Framework 迁移由两部分组成 - 代码和模型的哈希。模型的散列用于确定模型是否已更改,从而确定是否需要进行任何新的迁移。

如果您更改模型,则会更改哈希。该哈希存储在 MigrationName.designer.cs 文件中。您不能只编辑模型并更改 migration.cs 代码,因为模型不再与模型哈希匹配。您还需要为模型重新生成哈希。

唯一的方法是回滚你的数据库,并更新哈希。

考虑您应用了 3 个迁移:

  • 迁移1
  • 迁移2
  • 迁移3

  • 如果您想应用从 Migration2 开始的更改...
  • 回滚到 Migration1:Update-Database -TargetMigration Migration1 -Force (注意 - 这可能会导致数据丢失,因此请处理数据库的开发副本)
  • 使您的模型代码与迁移 2 所需的匹配,并手动更新迁移 2 的代码
  • 为 Migration2 重新生成设计器文件:Add-Migration xxxxxxxxxxx_Migration2 (使用迁移的全名,包括日期)。这只会更新designer.cs 文件
  • 申请迁移2:Update-Database -TargetMigration Migration2
  • 将任何模型更改重新应用于 Migration3 的代码
  • 为 Migration3 重新生成设计器文件:Add-Migration xxxxxxxxxxx_Migration3
  • 将数据库更新到最新:Update-Database
  • 关于entity-framework - 如何编辑以前应用的迁移而不先在 EF 代码中添加另一个迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21951697/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com