gpt4 book ai didi

c# - DbMigrator 不回滚

转载 作者:行者123 更新时间:2023-11-30 17:37:27 25 4
gpt4 key购买 nike

我在 Entity Framework 6 中有一个自定义的 IDatabaseInitializer 并注意到了一些奇怪的事情。当调用 DbMigrator.Update 方法时,如果迁移失败事务,它不会回滚,从而使数据库处于不一致状态,您无法再降级。

这是我正在使用的迁移代码:

var migrator = new DbMigrator(_configuration);

var pendingMigrations = migrator.GetPendingMigrations();

if (migrator.GetPendingMigrations().Any())
{
migrator.Update();
}

我应该简单地做这样的事情吗:

using (var trx = context.Database.BeginTransaction())
{
try
{
var migrator = new DbMigrator(_configuration);

var pendingMigrations = migrator.GetPendingMigrations();

if (migrator.GetPendingMigrations().Any())
{
migrator.Update();
}
trx.Commit();
}catch
{
trx.Rollback();
throw;
}
}

据我所知,这应该可行,只是想不通为什么 DbMigrator 不在内部执行此操作。

最佳答案

这似乎是由于我使用的 MYSQL 等数据库引擎不支持事务性 ALTER 而发生的,因此会进行隐式提交。

http://dev.mysql.com/doc/refman/5.7/en/implicit-commit.html

关于c# - DbMigrator 不回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38057065/

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