打多少次电话.SaveChangesAsync() in 中.BeginTransaction() EF Core 3.



调用SaveChangesAsync每个更改,如.Remove.Update.Add

using (var transaction = _unitOfWork.BeginTransaction())
{
try
{
var structureProfile = await _unitOfWork.StructureProfiles.GetByStructureIdAsync(id);
if (structureProfile != null)
{
_unitOfWork.StructureProfiles.Remove(structureProfile);
await _unitOfWork.SaveChangesAsync();
}
_unitOfWork.Structures.Remove(structure);
await _unitOfWork.SaveChangesAsync();
await transaction.CommitAsync();
return NoContent();
}
catch (Exception)
{
await transaction.RollbackAsync();
throw;
}
}

还是在最后一部分打电话给SaveChangesAsync()

using (var transaction = _unitOfWork.BeginTransaction())
{
try
{
var structureProfile = await _unitOfWork.StructureProfiles.GetByStructureIdAsync(id);
if (structureProfile != null)
{
_unitOfWork.StructureProfiles.Remove(structureProfile);
//await _unitOfWork.SaveChangesAsync(); -- Remove this part?
}
_unitOfWork.Structures.Remove(structure);
await _unitOfWork.SaveChangesAsync();
await transaction.CommitAsync();
return NoContent();
}
catch (Exception)
{
await transaction.RollbackAsync();
throw;
}
}

在您的情况下,使用单个方法执行整个工作单元,您不需要事务:SaveChangesAsync会将实际查询作为单个事务执行。

例如,当工作分布在多个方法中时,事务变得有用,每个方法都对自己的部分负责,包括自己的SaveChangesAsync。然后,要么最终显式提交事务,要么释放其对象,使其回滚。

最新更新