我已经使用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表从未更新。要重新运行迁移,我必须手动删除添加的列。