繁体   English   中英

FluentMigrator 不回滚迁移

[英]FluentMigrator not rolling back migration

我正在使用 FluentMigrator (1.1.0) 来管理我项目中的数据库迁移。 迁移项目是一个 c# class 库,我正在使用流畅的迁移器工具来运行修订。 我的本地环境是 windows mysql 实例,但我的开发环境是 linux mysql 实例。

前几天,在针对开发环境运行修订版时,迁移失败了。 在检查数据库时,我看到在执行修订之前,数据库还没有回滚到 state。

以下是失败的修订; 为什么表格没有恢复到原来的 state? A、B 和 C 列仍然全部删除。

public override void Up()
{
    Delete
        .Column("A").Column("B").Column("C")
        .FromTable("TABLENAME");

    Delete.FromTable("TABLENAME").IsNull("D");

    //FAILS HERE - !!! Cannot change column 'D': used in a foreign key constraint
    //'FK_TABLENAME_D_OTHERTABLE_COLUMN'
    Alter.Column("D").OnTable("TABLENAME").AsInt32().NotNullable();

    Create
        .PrimaryKey("PK_TABLENAME")
        .OnTable("TABLENAME")
        .Columns(new string[] { "D", "E", "F", "G" });
}

根据wiki ,他们添加了对迁移的支持,我已经验证默认事务行为是每次迁移 1 个事务。 我还验证了它不会回滚这个简单的迁移:

    public override void Up()
    {
        Delete
            .Column("A").Column("B").Column("C")
            .FromTable("Table");

        throw new Exception("e");
    }

然后我尝试了这个修订并成功回滚。

    public override void Up()
    {
        Create.Table("Table")
            .WithColumn("Id").AsInt32().PrimaryKey().Identity().NotNullable();

        throw new Exception("e");
    }

想法?

更新

这是创建表的修订:

[Migration(49)]
public class _0049_CreateTableNameTable : Migration
{
    public override void Up()
    {
        Create.Table("TableName")
            .WithColumn("Id").AsInt32().PrimaryKey().Identity().NotNullable()
            .WithColumn("FK1").AsInt32().ForeignKey("OtherTable", "Id").NotNullable()
            .WithColumn("FK2").AsInt32().ForeignKey("OtherTable2", "Id").NotNullable()
            .WithColumn("FK3").AsInt32().ForeignKey("OtherTable3", "Id").NotNullable()
            .WithColumn("FK4").AsInt32().ForeignKey("OtherTable4", "Id").NotNullable()
            .WithColumn("CreatedDate").AsDateTime().NotNullable()
            .WithColumn("UpdatedDate").AsDateTime().NotNullable();
    }
}

这是删除表的修订:

    [Migration(53)]
    public class _0053_AlterTableNameTable : Migration
    {
        public override void Up()
        {
            Delete
                .Column("Id").Column("UpdatedDate").Column("CreatedDate")
                .FromTable("TableName");

            Delete.FromTable("TableName").IsNull("FK1");

           //FAILS HERE
           Alter.Column("FK1").OnTable("TableName").AsInt32().NotNullable();

            Create
                .PrimaryKey("PK_TableName")
                .OnTable("TableName")
                .Columns(new string[] { "FK1", "FK2", "FK3", "FK4" });
        }
}

如文档中所述,DDL 语句无法回滚。 可悲的是,我也找不到解决办法。

https://dev.mysql.com/doc/refman/8.0/en/cannot-roll-back.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM