小编典典

我需要“ ransactionScope.Complete();”吗?

sql

据我了解,使用a的“正确”方法TransactionScope是始终transactionScope.Complete();在退出using块之前调用。像这样:

using (TransactionScope transactionScope = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted }))
{
    //...
    //I'm using this as a NOLOCK-alternative in Linq2sql.
    transactionScope.Complete();
}

但是,我已经看到,没有它,代码就可以工作,甚至我从中也学会了使用它的答案
。所以我的问题是,是否必须使用它?


阅读 156

收藏
2021-03-23

共1个答案

小编典典

所以我的问题是,是否必须使用它?

Complete为了进行COMMIT交易而进行更新时必须使用。否则,事务管理器将发出ROLLBACK并撤消所做的更改。

对于像您的示例这样的只读事务,无论有没有,我都认为没有实质性的区别Complete。在这两种情况下,由事务管理器发出的COMMITROLLBACK都会具有释放事务所持有的锁和资源的相同净效果。

尽管不要求Complete在只读事务中进行调用,但它仍然是IMHO的最佳实践。考虑一下这个可怜的开发人员,该开发人员后来在不知不觉Complete中丢失了数据修改代码到您的事务块中。

2021-03-23