gpt4 book ai didi

c# - TransactionScope 无意中锁定了部分数据库

转载 作者:行者123 更新时间:2023-11-30 22:08:51 27 4
gpt4 key购买 nike

我有一个 Web 应用程序,许多用户在任何给定时刻都在使用它。从数据库的角度来看,他们在系统中移动时不断地从任意数量的表中写入和读取数据。此外,我们还有许多将数据导入该系统的流程。

今天,在调试导入过程时,我的代码在事务处理过程中因异常而停止。我几乎立即开始收到系统用户查询失败的报告。我以某种方式将我的操作与它相关联,点击继续,突然间查询又开始工作了。

简而言之,我认为我设置交易的方式是造成这种情况的原因,但我不太了解它的影响,无法解决它。

我需要一个事务,以便在出现任何问题时将其回滚,但它似乎在作用域处于事件状态或“挂起”时锁定了数据库。有什么方法可以更改此设置以防止出现我遇到的问题?

using (TransactionScope scope = new TransactionScope(
TransactionScopeOption.Required,
System.TimeSpan.MaxValue))
{
using (var context = new EntityContext())
{
//lots of write operations in here
}
}

最佳答案

it appears to be locking the database while the scope is active or "hung"

给定范围内的线程是否正在运行并不重要。不过,您是正确的,因为事件事务可以持有锁。

持有什么锁完全取决于您的工作负载和 RDBMS。没有神奇的“不锁定”选项。锁在那里是有原因的。

鉴于问题没有关于正在运行的查询、架构和 RDBMS 的信息,我只能鼓励您熟悉 RDBMS 中的锁定。没有简单的解决方案。

如果您使用的是 SQL Server,您可能应该研究使用 SNAPSHOT 隔离来读取事务。这可以快速全面地解决阻塞问题。

关于c# - TransactionScope 无意中锁定了部分数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21998174/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com