我有以下代码:
using (TransactionScope ts = new TransactionScope())
{
DataAccess da = new DataAccess();
if (da.UpdateRecord(recordId))
{
ts.Complete();
}
}
当我的代码执行“da.UpdateRecord(recordId)”时会发生什么,id =“recordId”的行被阻止其余的请求,直到我执行“ts.Complete”?或整个表被阻止?
提前致谢, 德语。
答案 0 :(得分:-1)
这取决于数据库。如果您使用的是SQL Server,则在执行ts.Complete();
时会释放任何行或表级锁定。
关于它是否是行级锁或更高级别,SQL Server不一定默认为行级锁定 - 它可能使用页级或表级锁。
新TransactionScope()
对象的默认隔离级别为可序列化。这可能不是您所需要的,并且据称此默认设置容易出现死锁,并且通常不被认为有用。
TransactionScope
的默认构造函数默认隔离 等级为Serializable
,超时为1 minute
。在SQL Server中 SERIALIZABLE交易很少有用且非常有用 死锁倾向。
来源: MSDN博客 - Using new TransactionScope() Considered Harmful