无扰动地手动修改 EF Code First 迁移步骤

Manually modifying EF Code First Migration step without perturbations

我知道我们不能在 DbMigration 方法中手动更新代码,因为这会导致我们在下一个 DbMigration 步骤中处于不一致状态。

因此,例如,如果我在下面的 DBMigration 步骤的代码中将 nullable: false 更改为 nullable: true(同时在实体 class 中进行相同的修改) 这肯定会带来问题。正确的方法是在实体 class 中应用修改 only 并在 Package Manager Console 中添加 new DBMigration 步骤(Add-Migration).

public partial class AddDisabledOnUser : DbMigration
{
    public override void Up()
    {
        AddColumn("dbo.Users", "Disabledc => c.Boolean(nullable: false));
    }

    public override void Down()
    {
        DropColumn("dbo.Users", "Disabled");
    }
}

但是使用 SQL 命令的 DBMigration 步骤怎么样:

public partial class UpdateSomeUsers : DbMigration
{
    public override void Up()
    {
        Sql("UPDATE Users SET Remark = 'Blah blah' WHERE UserName like 'ABC'");
    }

    public override void Down()
    {

    }
}

谢谢。

更改已应用于数据库的迁移不会有任何影响,因此我假设您想在 运行 之前更改针对数据库的迁移。如果是这样,那么你的问题就不是真正的问题了:

  1. 如果您想更改 属性 或模型的另一个方面,请执行此操作,然后使用 -Force 开关再次添加相同的迁移,或者删除迁移并再次添加。现在迁移将很好地匹配您的模型
  2. 如果您想添加额外的 SQL 语句,只需按照您提到的将一个或多个 Sql("...") 添加到迁移文件中即可。改变多少次都没有关系。

手动修改迁移文件的唯一问题是,如果您必须重新创建迁移,则必须注意不要忘记再次添加手动更改。为避免这种情况,我所做的是自定义迁移 SQL 生成,以便我可以在映射文件中指定我的自定义 SQL 代码。