我正在开发一个分发并依赖于某些内部数据库操作以及某些第三方API的进程。如果在任何时候发生错误,我想利用事务范围功能回滚。
以下是我的流程如何运作。
用户注册流程
现在是我担心的情况。让我们说#1& #2成功完成,在执行#3时,由于任何原因失败。在这种情况下,事务范围是否会恢复#1和#2?我确定#1,但它也会被#2处理?如果没有,我可以在这种情况下实施什么替代解决方案。
答案 0 :(得分:0)
我认为这通常应该避免,也就是说,使REST API调用成为事务的一部分。但是,如果你仍然需要这样做,那么你需要自己实现事务协调器。
在您的情况下,在dapper插件周围使用transactionScope并调用API。如果出现问题,请向API中的其他方法发送新请求,以回滚您在事务中执行的操作。
try {
using (var ts = new TransactionScope())
{
// insert data using dapper
// Do your API Call
ts.Complete()
}
}
catch(Exception)
{
// Rollback your API call.
}
答案 1 :(得分:0)
你无法控制API发生的事情。
但这可以通过一些错误代码相互理解来完成,如果我发回“错误”,这意味着我回滚,你也回滚