使用TransactionScope c#对象时行阻塞或表被阻止?

时间:2014-11-14 20:23:33

标签: c# transactionscope

我有以下代码:

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

当我的代码执行“da.UpdateRecord(recordId)”时会发生什么,id =“recordId”的行被阻止其余的请求,直到我执行“ts.Complete”?或整个表被阻止?

提前致谢, 德语。

1 个答案:

答案 0 :(得分:-1)

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

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

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

  

TransactionScope的默认构造函数默认隔离   等级为Serializable,超时为1 minute。在SQL Server中   SERIALIZABLE交易很少有用且非常有用   死锁倾向。

来源: MSDN博客 - Using new TransactionScope() Considered Harmful