问题描述
大家早上好,
我们正在使用 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 只是一个包装器,它调用了分布式锁、sqldistributedReaderWriterLock 和 document.Guid 作为它的名字
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)