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

执行多条SQL语句时任意语句失败如何回滚已执行操作的影响?

解决方案

通过EF自带的显式事务包裹SQL执行逻辑即可实现原子性操作,完全沿用原有SQL写法,无需使用存储过程:

bool isDeleted = false;
// 开启数据库事务
using (var transaction = db.Database.BeginTransaction())
{
    try
    {
        var sqlCommand = @"DELETE FROM table1 WHERE id = @Id
                          DELETE FROM table2 WHERE id = @Id";
        // 此处SQL执行逻辑和原有写法完全一致
        int affectRows = db.Database.ExecuteSqlCommand(sqlCommand, new SqlParameter("@Id", Id));
        // 无异常则提交所有操作
        transaction.Commit();
        isDeleted = affectRows > 0;
    }
    catch
    {
        // 任意执行异常回滚所有已执行操作
        transaction.Rollback();
        isDeleted = false;
    }
}
  • 原有SQL语句里开头多余的@已移除,逐字字符串标识@需放在引号前才能正常识别换行
  • 只要任意一条SQL执行报错,事务会自动回滚所有操作,最终返回false,不会出现部分数据被删除的问题

内容的提问来源于stack exchange,提问作者Fanny Hunayn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:45:05