我正在运行一些复杂的东西,并试图减少某些事务花费的时间,因为它们似乎超时了,但我不确定进行以下更改会有什么影响。
假设我用的是..。
var scope = new TransactionScope(
TransactionScopeOption.Required,
DefaultTransactionOptions,
TransactionScopeAsyncFlowOption.Enabled
);
示例1:
using (scope)
{
// get stuff from multiple db's
// make a bunch of changes to entities
Db1.Savechanges();
Db2.Savechanges();
scope.Complete();
}
示例2:
// get stuff from multiple db's
// make a bunch of changes to entities
using (scope)
{
Db1.Savechanges();
Db2.Savechanges();
scope.Complete();
}
它们会做同样的事情吗?
我的直觉是他们应该这样做,但我也许能够减少我的超时,通过不做所有的CPU限制的事情,并保持事务处理我关心的位(数据连续性)。
发布于 2018-01-09 03:01:26
这是有区别的,但不是为了拯救。然而,我认为一旦你声明了作用域,未来的一切都会归于它。因此,您希望在最后的using语句中声明它。否则,所有get命令都将在事务作用域中,可能会根据设置锁定记录。但是,当涉及到save调用本身的超时时,没有任何区别,因为超时通常是单个DB故障,而不是事务作用域的总量。事务作用域使用计算机配置设置作为最大超时。默认机器超时时间为10分钟。因此,其中一个数据库SaveChanges调用本身可能大于默认的30秒连接,因此TransactionScope不是问题所在。
https://stackoverflow.com/questions/48153582
复制相似问题