Hello有没有办法检查使用TransactionScope的事务是已提交还是回滚?
答案 0 :(得分:2)
在处理TransactionScope之前,不会发生实际的提交。如果Commit因任何原因失败,将抛出异常。您应该捕获该异常并将失败事务的逻辑放在Catch块中。如果没有抛出异常,则应确保Commit成功。如果由于我无法想到的任何原因,您不信任该框架,您可以随时创建另一个范围并查询结果以确保它们已被应用。
var transactionFailed = false;
try
{
using (var tx = new TransactionScope())
{
tx.Complete();
}
}
catch (TransactionAbortedException ex)
{
transactionFailed = true;
writer.WriteLine("TransactionAbortedException Message: {0}", ex.Message);
}
catch (ApplicationException ex)
{
transactionFailed = true;
writer.WriteLine("ApplicationException Message: {0}", ex.Message);
}
catch (Exception ex)
{
transactionFailed = true;
writer.WriteLine("Exception Message: {0}", ex.Message);
}
答案 1 :(得分:0)
是。只需添加一个变量并检查它。
bool txExecuted;
using (var tx = new TransactionScope())
{
//code
if (code was OK)
{
tx.Complete();
txExecuted = true;
}
}
答案 2 :(得分:0)
// Complete方法提交事务。如果抛出异常,则 //未调用Complete,并回滚事务。
只有在sucessfull transactionScope.Complete()方法执行后才会调用completeCallback方法
所以你可以使用函数:
public bool TryRunTransaction(Action transactionAction)
{
try
{
using (var transactionScope = new TransactionScope())
{
transactionAction();
transactionScope.Complete();
}
return true;
}
catch (TransactionAbortedException)
{
return false;
}
}