BulkCopyAsync 这个在SQLSERVER中会自动提交吗? 返回
await _Mes.Ado.BeginTranAsync();
try
{
if (logBatch.Count > 0)
{
var logResult = await _Mes.Fastest<MEntity>().SplitTable().BulkCopyAsync(logBatch);
}
await _Mes.Ado.CommitTranAsync();
_SaveFail = 0;
}
catch (Exception ex)
{
await _Mes.Ado.RollbackTranAsync();
//重新入队数据
try
{
int logRequeueCount = 0;
foreach (var log in logBatch)
{
_logQueue.Enqueue(log);
logRequeueCount++;
}
}
catch (Exception eqEx)
{
//入队失败,降级到文件
}
}
我现在是在批量插入数据库,外面包裹了一层事务,他有的时候事务失败 我会将logBatch重新插入列表 然后修改大小重新插入(有的时候数据库被其他地方锁表导致插入超时就加了个重试),
然后我发现一个问题,他事务异常回滚了 但是他在数据库里面能查询到对应主键ID的数据,导致我重新插入的时候报错提示主键重复了?
还有一次是他抛异常 也会出现上面的错误
This SqlTransaction has completed; it is no longer usable.
热忱回答(2)
-
fate sta VIP0
2周前加上事务。
0 回复 -
°独钓๑寒む VIP0
2周前@fate sta:目前代码是有在用BeginTranAsync这个事务了 是要加哪种事务0.0
0 回复