Entity Framework 事务代码块
Entity Framework Transaction code blocks
我 运行 一些复杂的东西,并试图减少某些事务所花费的时间,因为它们似乎正在超时,但我不确定进行以下更改会产生什么影响。
所以假设我正在使用...
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 绑定的事情并保留我关心的事务(数据连续性)来减少超时。
有区别,但不是扑救。但是,我认为一旦您声明了范围,接下来的一切都将属于它。因此,您想在最后的 using 语句中声明它。否则,所有 get 命令都将在事务范围内,可能会根据设置锁定记录。但是,当涉及到保存调用本身的超时时,不会有任何区别,因为超时通常是单个数据库故障,而不是事务范围的总量。事务范围使用机器配置设置作为最大超时。默认机器超时为 10 分钟。因此,其中一个 db SaveChanges 调用本身可能大于默认的 30 秒连接,因此 TransactionScope 不是问题。
我 运行 一些复杂的东西,并试图减少某些事务所花费的时间,因为它们似乎正在超时,但我不确定进行以下更改会产生什么影响。
所以假设我正在使用...
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 绑定的事情并保留我关心的事务(数据连续性)来减少超时。
有区别,但不是扑救。但是,我认为一旦您声明了范围,接下来的一切都将属于它。因此,您想在最后的 using 语句中声明它。否则,所有 get 命令都将在事务范围内,可能会根据设置锁定记录。但是,当涉及到保存调用本身的超时时,不会有任何区别,因为超时通常是单个数据库故障,而不是事务范围的总量。事务范围使用机器配置设置作为最大超时。默认机器超时为 10 分钟。因此,其中一个 db SaveChanges 调用本身可能大于默认的 30 秒连接,因此 TransactionScope 不是问题。