当前位置: 首页 > 面试题库 >

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

贡念
2023-03-14
问题内容

据我了解,使用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();
}

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


问题答案:

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

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

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

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



 类似资料:
  • 问题内容: 我有一个网站,它的点击率很高,我遇到了问题,JDCB连接错误。 我对关闭有点困惑,我需要关闭还是仅关闭就足够了。 另外,我需要关闭它吗? 问题答案: 是的,您必须关闭PreparedStatement和结果集,因为它们可能导致内存泄漏。有关更多信息,请访问 http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html

  • 我用Java 8创建了一个Java应用程序。 我已将其部署到服务器,并出现以下错误: 当我运行java版本时,我得到了以下信息: 我以前没见过这个。我需要安装JRE 8吗?

  • 问题内容: 我真的需要做mysql_close()吗?为什么或者为什么不? 即使我不执行mysql_close,也有触发器会在mysql_connect之后关闭链接吗? 问题答案: 在大多数情况下,调用不会对性能产生任何影响。但是,关闭程序不再使用的资源(文件句柄,打开的套接字,数据库连接等)始终是一个好习惯。 如果您正在做可能要花费几秒钟的操作,例如从REST API读取和解析数据,则尤其如此。

  • 问题内容: 在Linux(内核2.6.5)上,我们的构建系统使用调用gcc 。 使用时仍然需要吗? 它与期权有什么关系?我知道我应该与pthreads一起使用,还需要吗? 附带说明一下,您在gcc 3.3.3和gcc 4.xx之间使用REENTRANT有什么区别吗? 当我使用gcc选项时,可以看到已定义。从命令行省略是否会有所不同,例如某些对象可以在没有多线程支持的情况下进行编译,然后链接到使用p

  • 几个月前,我在使用java.sql时了解到了这一点。连接我需要关闭PreparedStatements和ResultSet,以防止内存泄漏,如下所述 然而,我最近开始与一个使用org.sql2o的新团队合作。连接,这是一个很好且有用的jdbc包装器,但我注意到它们通常不会关闭其org.sql2o。查询对象。 如您所见,查询对象从未显式关闭。我认为最好同时关闭查询: 但我不确定这是否真的有必要。如果

  • 我想使用进行AppIndexing。我应该使用,但当我在Android Studio中打印出时,我只有SHA1。 最大的问题是,为什么Android Studio只在我从Gradle打印时列出调试键,为什么它说?知道吗? 顺便说一句,这个问题和建议的副本没有关系。 回答jyomin 2的问题。我希望它也能帮助别人。 null 小心!!! 如果您在密钥库中有多个密钥,它可能不会为您提供与给定应用程序