TransactionScope
提供了将一组操作转换为事务的功能,以便全部成功完成或全部不完成。我的问题是事务范围是否适用于某些类型的操作(例如,仅SQL连接,Azure等)?
例如,考虑下面的代码块
using (TransactionScope scope = new TransactionScope())
{
SaveToSQLserver(parameter);
SaveToSalesForce(parameter);
SaveToSAP(parameter);
SaveToAzure(parameter);
scope.Complete();
}
现在假设在SaveToSAP
发生了一个错误,该错误已保存到Salesforce;交易如何从Salesforce回滚?如果所有内容都在内存中,那么如何确保它在实际保存时会成功?
答案 0 :(得分:1)
TransactionScope
能够支持许多不同类型的系统上的分布式事务,但这不是自动的。该documentation可以使您一目了然(值得在Transaction Processing上查看整个文档层次结构。
正如Dave Anderson在评论中提到的那样,资源管理器控制在提交和回滚期间执行的操作,因此“如何完成”由每个资源管理器单独管理。
那么,除了SQL之外,其他东西还能参与事务范围吗?是的他们可以。只要每个系统(例如邮件系统)都存在资源管理器,它就可以参与(enlist)。
如果您正在处理无法登记的事务,那么当您发现需要回滚(通常在发生异常时)时,必须手动执行compensating transaction。