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

EF6中Transaction.Complete()报错:ROLLBACK无对应BEGIN TRANSACTION

EF6 BulkInsert后Transaction.Complete()触发回滚异常

问题背景

继承一段ASP.NET C#代码,使用EF6的BulkInsert()向SQL Server表(仅含少量字段)插入1至1000行记录。代码运行频繁且多数情况下成功,但偶尔会在调用Transaction.Complete()时失败——此时记录已成功插入。

相同数据在生产环境(PROD)出现异常,测试环境(QA)无异常,代码采用多线程执行插入操作,怀疑此为诱因。目标表无唯一索引或其他会引发异常的约束。

代码示例

var _TransactionOption = new TransactionOptions
{
    IsolationLevel = System.Transactions.IsolationLevel.Serializable,
    Timeout = TimeSpan.FromSeconds(TRANSACTION_MAXSECONDS)
};

using (var _Trans = new TransactionScope(TransactionScopeOption.Required, _TransactionOption))
{
    _db.Configuration.AutoDetectChangesEnabled = UseAutoDetectChangesEnabled_;
    var options = new BulkInsertOptions
    {
        EnableStreaming = true,
        TimeOut = 120,
        SqlBulkCopyOptions = SqlBulkCopyOptions.TableLock
    };
    _db.BulkInsert(_Data.Values, options);
    // 出现异常时会显示此处调试信息
    _Trans.Complete(); // 此处触发异常
} 
catch 
{ 
    // 此处报告错误 
}

报错信息

The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION

已尝试操作

  • 增加日志检查_Data中的值,排查是否存在导致数据库端错误的数据
  • 添加验证逻辑,确保插入字符串长度不超过字段限制,其他字段符合目标表要求
  • 对比PROD和QA的.NET安装情况:两台服务器配置差异较大,但IIS应用程序开发组件一致
  • 查阅Stack Overflow相关错误讨论,未找到解决方案

疑问

  1. 该错误为何发生?为何Complete()会触发回滚错误,且异常未在BulkInsert时出现?
  2. 若无法直接定位原因,可添加哪些日志进一步排查?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:15:38