.NET中的TransactionScope是否仅适用于特定类型的事务?

时间:2019-07-10 23:31:36

标签: c# transactionscope

TransactionScope提供了将一组操作转换为事务的功能,以便全部成功完成或全部不完成。我的问题是事务范围是否适用于某些类型的操作(例如,仅SQL连接,Azure等)?

例如,考虑下面的代码块

using (TransactionScope scope = new TransactionScope())
{
    SaveToSQLserver(parameter);
    SaveToSalesForce(parameter);
    SaveToSAP(parameter);
    SaveToAzure(parameter);
    scope.Complete();
}

现在假设在SaveToSAP发生了一个错误,该错误已保存到Salesforce;交易如何从Salesforce回滚?如果所有内容都在内存中,那么如何确保它在实际保存时会成功?

1 个答案:

答案 0 :(得分:1)

TransactionScope能够支持许多不同类型的系统上的分布式事务,但这不是自动的。该documentation可以使您一目了然(值得在Transaction Processing上查看整个文档层次结构。

正如Dave Anderson在评论中提到的那样,资源管理器控制在提交和回滚期间执行的操作,因此“如何完成”由每个资源管理器单独管理。

那么,除了SQL之外,其他东西还能参与事务范围吗?是的他们可以。只要每个系统(例如邮件系统)都存在资源管理器,它就可以参与(enlist)。

如果您正在处理无法登记的事务,那么当您发现需要回滚(通常在发生异常时)时,必须手动执行compensating transaction