我有以下代码:
using (TransactionScope ts = new TransactionScope())
{
DataAccess da = new DataAccess();
if (da.UpdateRecord(recordId))
{
ts.Complete();
}
}当我的代码执行"da.UpdateRecord(recordId)“时会发生什么,id = "recordId”的行会阻塞其余的请求,直到我执行"ts.Complete“?还是整个表都被阻塞了?
提前谢谢你,德国人。
发布于 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
https://stackoverflow.com/questions/26938227
复制相似问题