You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EF Core出现DbUpdateException时是否会自动回滚事务?

EF Core DbUpdateException 事务回滚规则说明
  • 未手动开启显式事务时:EF Core 调用SaveChanges()会默认开启隐式事务,一旦抛出DbUpdateException,隐式事务会自动回滚,无需额外手动操作。
  • 已手动开启显式事务(调用BeginTransaction()/BeginTransactionAsync())时:DbUpdateException不会触发自动回滚,必须手动执行回滚操作。

针对你使用 MySQL + FOR UPDATE的场景补充说明:
FOR UPDATE加的行锁是事务级别的,和事务生命周期绑定。如果是在显式事务内执行的加锁查询,后续SaveChanges()报错时,即便你不手动回滚,事务销毁时也会自动释放锁,但还是建议显式调用Rollback(),避免连接复用时出现锁长时间持有的问题。

显式事务场景下的示例代码

using var tran = await context.Database.BeginTransactionAsync();
try
{
    // 执行带FOR UPDATE的查询
    var data = await context.TableName.FromSqlRaw("SELECT * FROM table_name FOR UPDATE").ToListAsync();
    // 数据修改逻辑
    await context.SaveChangesAsync();
    await tran.CommitAsync();
}
catch (DbUpdateException)
{
    // 必须手动回滚事务
    await tran.RollbackAsync();
    // 后续异常处理逻辑
}

内容的提问来源于stack exchange,提问作者Thanuja Dilhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:51:03