DocumentDb在transactioncope中写入

时间:2015-08-04 21:01:26

标签: c# .net azure transactionscope azure-cosmosdb

我正在尝试将DocumentDb写作交易的一部分,如下所示 -

using (var scope = new TransactionScope)
{
//first transaction

//write to document db

//third transaction
}

我观察到如果第三个事务失败,则不会回滚documentDb write,我仍然会在集合中看到该文档。第一个事务(在这种情况下为NEventStore)完美回滚。有谁知道DocumentDb是否支持TrnasactionScope。如果我有嵌套交易怎么办?

谢谢!

编辑: 所以看起来DocumentDb不支持TransactionScope,它对它们一无所知。有没有办法让DocumentDb事务成为C#外部事务的一部分?有没有人以前遇到过这个用例?

编辑2:按照建议进行跟进问答here

2 个答案:

答案 0 :(得分:5)

DocumentDB操作独立于TransactionScope。一旦操作返回,它就完成了。数据库服务对TransactionScope没有任何了解,也没有以任何方式连接到它。

当使用服务器端存储过程时,DocumentDB确实有自己的事务范围。您可以在存储过程中进行多个数据库调用,如果一切都成功,则存储过程退出时会进行隐式提交。如果出现错误并抛出异常,则对存储过程范围内对数据库执行的所有操作执行隐式回滚。

答案 1 :(得分:0)

许多SQL用户不了解在事务不可用的地方该做什么。

您应该自己实现补偿逻辑,或者使用Windows Workflow Foundation等框架。补偿逻辑与企业集成模式有关。您还可以使用相关ID模式来检查是否已完成大操作。

当需要进行长时间运行的事务时,SQL人员以相同的方式管理大型操作。 https://www.amazon.com/Enterprise-Integration-Patterns-Designing-Deploying/dp/0321200683/ref=sr_1_1?ie=UTF8&qid=1480917322&sr=8-1&keywords=integration+patterns