据我所知,使用 TransactionScope
的“正确”方法是在退出 using< 之前始终调用
block 。像这样:transactionScope.Complete();
/
using (TransactionScope transactionScope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted }))
{
//...
//I'm using this as a NOLOCK-alternative in Linq2sql.
transactionScope.Complete();
}
但是,我已经看到代码在没有它的情况下也能工作,甚至 the answer I've learnt to use it from省略它。所以我的问题是,是否必须使用它?
最佳答案
So my question is, must it be used or not?
Complete
在进行更新时必须使用 COMMIT
事务。否则,事务管理器将发出 ROLLBACK
并撤消所做的更改。
对于像您的示例这样的只读事务,我认为有或没有Complete
没有实质性区别。在这两种情况下,事务管理器发出的 COMMIT
或 ROLLBACK
将具有释放事务持有的锁和资源的相同净效果。
虽然在只读事务中调用 Complete
不是必需的,但这仍然是恕我直言的最佳实践。想想那些后来无意中将数据修改代码添加到您的事务 block 而没有看到 Complete
丢失的可怜的开发人员。
关于c# - 我需要 "transactionScope.Complete();"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53657509/