使用:
看来,如果EF Core的update-database
命令失败,则不会执行部分迁移的回滚。那是应该如何工作的?如果是这样,我很好奇为什么?更重要的是,当update-database
发生错误时,是否有办法自动进行回滚,或者至少可以在以后手动进行回滚?我已经尝试过这样的事情:
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql("Start Transaction;");
...
migrationBuilder.Sql("Commit;");
}
,但是之后运行Rollback;
则无济于事。谢谢!
答案 0 :(得分:2)
看来,如果EF Core的update-database命令失败,则不会执行部分迁移的回滚。那是应该如何工作的?如果是这样,我很好奇为什么?
虽然EF Core和Pomelo都支持将迁移作为事务的一部分进行应用(并且实际上默认情况下是这样做的),但是MySQL本身将隐式地分别提交每个结构更改语句。
有关更多信息,请参见以下文章:
更重要的是,当更新数据库出现错误时,是否有一种方法可以使回滚自动发生,或者至少可以在以后手动运行?
安全地为MySQL应用迁移的唯一可靠方法是使用备份/还原手动回滚任何部分应用的迁移:
还有其他数据库系统,例如SQL Server或PostgreSQL,支持事务安全的结构更改语句,而MySQL不支持。