首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TransactionScope c#对象时,是行阻塞还是表阻塞?

问使用TransactionScope c#对象时,是行阻塞还是表阻塞?
EN

Stack Overflow用户
提问于 2014-11-15 04:23:33
回答 1查看 586关注 0票数 0

我有以下代码:

代码语言:javascript
复制
using (TransactionScope ts = new TransactionScope())
 {
      DataAccess da = new DataAccess();
      if (da.UpdateRecord(recordId))
      {
           ts.Complete();
      }
 }

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

提前谢谢你,德国人。

EN

回答 1

Stack Overflow用户

发布于 2014-11-15 04:35:10

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

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

新TransactionScope()对象的默认隔离级别是read serializable。这可能不是您的情况所需要的,而且据说这个默认设置很容易发生死锁,并且通常被认为没有用。

TransactionScope的默认构造函数

将隔离级别默认设置为Serializable,将超时设置为1 minute。在SQL Server中,SERIALIZABLE事务很少有用,而且极易发生死锁。

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26938227

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档