我目前有一个方法,它读取数据以确定是否需要更新,然后将更新推送到数据库(依赖注入)。该方法非常困难,我发现并发相关的错误,即多次更新,因为几个线程在第一次更新之前读取数据。
我使用锁解决了这个问题,它运行得非常好。我怎样才能使用TransactionScope来做同样的事情呢?我可以吗?它会阻止另一个线程作为锁吗?此外,我可以锁定一个特定的“id”,因为我正在使用锁(我保留一个字典,存储一个对象以锁定每个id)?
我正在使用Entity Framework 5,虽然它被存储库和工作单元模式隐藏。
答案 0 :(得分:2)
应用程序级锁定可能不是此问题的解决方案。首先,您通常只需要锁定单个记录或记录范围。接下来,您可能需要锁定其他修改并进入相当复杂的代码。
这种情况通常用乐观或悲观的并发处理。
如果您真的构建了一个解决方案,其中许多并发进程会一直尝试更新相同的数据,您可能最终会重新设计,因为没有基于锁定或重新运行失败更新的可靠的高性能解决方案。