BulkCopyAsync 这个在SQLSERVER中会自动提交吗? 返回

SqlSugar 沟通中
2 180

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