.NET Core TransactionScope 和 DistributedLock 的区别

问题描述

大家早上好,

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

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

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

此外,整个代码托管在多台机器上,这就是为什么我们还实现了 ma​​callon (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 只是一个包装器,它调用了分布式锁、sqldistributedReaderWriterLock 和 document.Guid 作为它的名字

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...