首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >实体框架事务代码块

实体框架事务代码块
EN

Stack Overflow用户
提问于 2018-01-08 23:44:45
回答 1查看 68关注 0票数 3

我正在运行一些复杂的东西,并试图减少某些事务花费的时间,因为它们似乎超时了,但我不确定进行以下更改会有什么影响。

假设我用的是..。

代码语言:javascript
运行
复制
var scope = new TransactionScope(
   TransactionScopeOption.Required, 
   DefaultTransactionOptions, 
   TransactionScopeAsyncFlowOption.Enabled
);

示例1:

代码语言:javascript
运行
复制
using (scope)
{

   // get stuff from multiple db's
   // make a bunch of changes to entities
   Db1.Savechanges(); 
   Db2.Savechanges();
   scope.Complete();
}

示例2:

代码语言:javascript
运行
复制
   // get stuff from multiple db's
   // make a bunch of changes to entities

using (scope)
{
   Db1.Savechanges(); 
   Db2.Savechanges();
   scope.Complete();
}

它们会做同样的事情吗?

我的直觉是他们应该这样做,但我也许能够减少我的超时,通过不做所有的CPU限制的事情,并保持事务处理我关心的位(数据连续性)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-09 03:01:26

这是有区别的,但不是为了拯救。然而,我认为一旦你声明了作用域,未来的一切都会归于它。因此,您希望在最后的using语句中声明它。否则,所有get命令都将在事务作用域中,可能会根据设置锁定记录。但是,当涉及到save调用本身的超时时,没有任何区别,因为超时通常是单个DB故障,而不是事务作用域的总量。事务作用域使用计算机配置设置作为最大超时。默认机器超时时间为10分钟。因此,其中一个数据库SaveChanges调用本身可能大于默认的30秒连接,因此TransactionScope不是问题所在。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48153582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档