使用事务范围 c# 对象时阻止的行或阻止的表

本文关键字:事务 范围 对象 | 更新日期: 2023-09-27 18:30:31

我有以下代码:

using (TransactionScope ts = new TransactionScope())
 {
      DataAccess da = new DataAccess();
      if (da.UpdateRecord(recordId))
      {
           ts.Complete();
      }
 }

当我的代码执行"DA.UpdateRecord(recordId)",id = "recordId" 的行在其余请求中被阻止,直到我执行"ts.完成" ?还是整个表被阻止?

提前感谢,德语。

使用事务范围 c# 对象时阻止的行或阻止的表

这取决于数据库。如果使用的是 SQL Server,则在执行ts.Complete();时会释放任何行或表级锁。

关于它是行级锁还是更高级别锁,SQL Server 不一定默认为行级锁 - 它可能使用页级或表级锁。

TransactionScope()对象的默认隔离级别是可读取序列化的。这可能不是您的情况所需要的,而且据称此默认值容易出现死锁,并且通常被认为没有用。

TransactionScope 的默认构造函数默认隔离 级别到Serializable,超时到1 minute。在 SQL Server 中 可序列化事务很少有用且极其有用 容易死锁。

来源:MSDN 博客 - 使用新的 TransactionScope() 被认为是有害的