如何使用EntityFrameworkCore / Pomelo回滚失败的迁移?

时间:2019-07-18 23:13:14

标签: c# mysql entity-framework-core

我已经使用EntityFrameworkCore好几个月了。我已经将它与Postgres一起使用,并且目前正在通过Pomelo库将它与MySql一起使用。

与另一位开发人员一起工作时,我们遇到了一个我还没有处理的问题...已应用了部分迁移,但是它在中途执行命令时失败,因此将迁移完成了一半... < / p>

这是一个明显的问题,因为它导致需要先进行手动清理,然后才能重新运行迁移。我的第一个想法是这与事务有关,但是我只是假设EntityFrameworkCore会打开一个新事务来运行每个迁移...

我想知道的是,如何避免将来发生这种情况?有什么方法可以告诉EntityFrameworkCore使用事务进行迁移吗?

编辑:

这是Up()方法的样子:

protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.AddColumn<string>(
                name: "bom_list_j",
                table: "jj",
                type: "varchar(2048)",
                nullable: true);

            //add proc here
            migrationBuilder.Sql(Procedures.PGetBomList);
        }

And Procedures.PGetBomList只是用于构建过程的SQL字符串:

    public static string PGetBomList = @"
        USE `blah`;
        DROP procedure IF EXISTS `p_get_bom_list`;

        CREATE DEFINER=`blah_user`@`%` PROCEDURE `p_get_bom_list`(IN tin_id INT)
                    BEGIN
                        /*
                        DESCRIPTION:
                            -- returns bom list from the jj table
                            */

                        SELECT bom_list_j
                        FROM blah.jj
                        left join tt on jj.id = tt.jj_id
                        where tt.id = tin_id;
                            END;";

注意:不幸的是,我已经忘记了该错误的细节,但是我相信过程代码中最初存在一个错误...因此,它当然在迁移期间无法建立。因为添加未完全完成,所以仅添加列的部分起作用了,并且_efMigrationsHistory表从未更新。要重新运行迁移,我必须手动删除添加的列。

0 个答案:

没有答案