0

大家,早安,

我们正在实现一种使用EF Core将文档存储到SqlServer的方法。

这个名为SAVE的方法由控制器的多个端点调用,并且可以从createDocument端点和另一个端点putDocument 使用

一个额外的要求是此方法包含两个调用,将文档及其属性存储到2 个不同的存储库中,因此我们希望实现,如果对存储库的两个调用之一失败,它会回滚更改。

此外,整个代码托管在多台机器上,这就是为什么我们还实现了 macallon (GitHub) 的分布式锁库,以避免两台不同的机器同时访问/修改同一个文档。

混合使用这些解决方案是否正确?作为一个菜鸟,transactionScope已经是一个锁,从某种意义上说,在事务期间,其他机器甚至无法访问 Db 中的同一行,但请帮助我理解。谢谢

 public void Save(Document document){
using var scope = new TransactionScope(TransactionScopeOption.RequiresNew,
               TransactionScopeAsyncFlowOption.Enabled);

          
            try
            {
                using (var lockHandler = documentLock.CreateLockForGuid(document.Guid))
                {
                    repositoryOne.Save(document);

                    repositoryTwo.Save(document);
                
                    scope.Complete();
               }
            }
}

lockhandler 只是一个包装器,它调用distributedLock、SqlDistributedReaderWriterLock 并以document.Guid 作为其名称

4

0 回答 0