加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – FluentMigrator回滚到不可空的列?

发布时间:2020-12-15 07:38:49 所属栏目:百科 来源:网络整理
导读:鉴于以下迁移: [Migration(1)]public class Mig001 : Migration{ public override void Up() { Alter.Table("foo").AlterColumn("bar").AsInt32().Nullable(); } public override void Down() { Alter.Table("foo").AlterColumn("bar").AsInt32().NotNullab
鉴于以下迁移:
[Migration(1)]
public class Mig001 : Migration
{
    public override void Up()
    {
        Alter.Table("foo").AlterColumn("bar").AsInt32().Nullable();
    }

    public override void Down()
    {
        Alter.Table("foo").AlterColumn("bar").AsInt32().NotNullable();
    }
}

迁移器更改列并使其为空,并且在回滚时反向执行,并使其不再为空.

让我们说数据已经被自动迁移到foo中了现在有条列为空的行.

如果它被回滚,那么操作将失败,Fluentmigrator有什么办法来处理这种情况吗?或者最好的做法是什么

解决方法

简单的答案是为具有可空值的所有列设置默认值.您可以使用Execute.Sql表达式使用sql.这应该在Alter.Table表达式之前.
public override void Down()
{
    Execute.Sql("update foo set bar = 0 where bar is null");
    Alter.Table("foo").AlterColumn("bar").AsInt32().NotNullable();
}

长期的答案是,始终确保您可以回滚迁移是很多工作,您确定需要这样做吗?

例如,如果up操作是创建一个表,并且down操作是将其删除,那么应该将数据保存在临时表中,使其不会消失?对于大多数用例,在部署在测试环境中或在回滚失败的部署时使用down操作,并且在部署之后您将很容易回滚迁移.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读