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

前端之家收集整理的这篇文章主要介绍了c# – FluentMigrator回滚到不可空的列?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
鉴于以下迁移:
[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操作,并且在部署之后您将很容易回滚迁移.

原文链接:https://www.f2er.com/csharp/96088.html

猜你在找的C#相关文章