DocumentDb 在事务范围内写入

DocumentDb write within a transactionscope

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

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

//write to document db

//third transaction
}

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

谢谢!

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

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

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

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

很多 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