DocumentDb在transactioncope中写入

Abh*_*hek 3 .net c# transactionscope azure azure-cosmosdb

我试图使用DocumentDb写作交易的一部分,如下所示 -

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

//write to document db

//third transaction
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

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

编辑2:按照建议在此处跟进问题和答案

Dav*_*gon 5

DocumentDB操作独立于TransactionScope.一旦操作返回,就完成了.数据库服务不知道任何事情TransactionScope,也没有以任何方式连接到它.

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

  • 围绕它的唯一方法是使用DocumentDB的存储过程,如@David建议的那样. (2认同)
  • 执行此操作的最佳方法是在回滚分布式事务时在应用程序中实现补偿逻辑.如果在DocumentDB内容完成后外部部件失败,则执行补偿操作以"回滚"数据库. (2认同)
  • @ RyanCrawCour-MSFT当回滚操作失败时会发生什么? (2认同)