使用事务范围 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.完成" ?还是整个表被阻止?
提前感谢,德语。
这取决于数据库。如果使用的是 SQL Server,则在执行ts.Complete();
时会释放任何行或表级锁。
关于它是行级锁还是更高级别锁,SQL Server 不一定默认为行级锁 - 它可能使用页级或表级锁。
新TransactionScope()
对象的默认隔离级别是可读取序列化的。这可能不是您的情况所需要的,而且据称此默认值容易出现死锁,并且通常被认为没有用。
TransactionScope
的默认构造函数默认隔离 级别到Serializable
,超时到1 minute
。在 SQL Server 中 可序列化事务很少有用且极其有用 容易死锁。
来源:MSDN 博客 - 使用新的 TransactionScope() 被认为是有害的