gpt4 book ai didi

c# - FluentMigrator 回滚到不可空列?

转载 作者:可可西里 更新时间:2023-11-01 08:38:46 27 4
gpt4 key购买 nike

给定以下迁移:

[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();
}
}

迁移器更改列并使其可为空,在回滚时它会执行相反的操作并再次使其不可为空。

假设自迁移以来数据已添加到 foobar 列中现在有空行。

如果回滚那么操作就会失败,请问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();
}

长话短说,始终确保您可以回滚迁移需要大量工作,您确定需要这样做吗?

例如,如果上行操作是创建一个表,下行操作是删除它,您是否应该将数据保存在临时表中以使其不会消失?对于大多数用例,在测试环境中部署或回滚失败的部署时会使用 down 操作,并且您很少会在部署后回滚迁移。

关于c# - FluentMigrator 回滚到不可空列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17030507/

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