手动修改EF Code First Migration步骤,不受干扰



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

因此,例如,如果我在下面的DBMigration步骤的代码中将nullable: false更改为nullable: true(同时在实体类中进行相同的修改),这肯定会产生问题。正确的方法是在实体类中只应用修改,并在Package Manager Console (Add-Migration)中添加新的 DBMigration步骤。
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");
    }
}

但是在DBMigration步骤中使用如下SQL命令:

public partial class UpdateSomeUsers : DbMigration
{
    public override void Up()
    {
        Sql("UPDATE Users SET Remark = 'Blah blah' WHERE UserName like 'ABC'");
    }
    public override void Down()
    {
    }
}
  • 我可以修改sql命令中的sql代码而不影响DBMigration步骤吗?

  • 我可以在现有DBMigration步骤中添加更多sql命令而不影响DBMigration步骤吗?

  • 你确认我只能做没有修改实体模型的事情吗?

谢谢。

更改已经应用于DB的迁移不会产生任何影响,因此我假设您希望在对DB运行迁移之前更改迁移。如果是这样,那么你的问题就不是真正的问题:

  1. 如果你想改变一个属性或模型的另一个方面,这样做,然后用-Force开关再次添加相同的迁移,或者删除迁移并再次添加。现在迁移将很好地匹配您的模型
  2. 如果您想添加额外的SQL语句,只需像您提到的那样添加一个或多个SQL("…")到迁移文件。更改多少次都没有区别。

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

最新更新