entity-framework - Entity Framework 事务代码块

标签 entity-framework entity-framework-6 transactionscope distributed-transactions

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

所以假设我正在使用 ...

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 绑定(bind)的事情并保留我关心的事务(数据连续性)来减少超时。

最佳答案

有区别,但不是为了扑救。但是,我认为一旦您声明了范围,接下来的一切都将属于它。因此,您想在最后的 using 语句中声明它。否则,所有 get 命令都将在事务范围内,可能会根据设置锁定记录。但是,当涉及到保存调用本身的超时时,不会有任何区别,因为超时通常是单个数据库故障,而不是事务范围的总量。事务范围使用机器配置设置作为最大超时。默认机器超时为 10 分钟。因此,其中一个 db SaveChanges 调用本身可能大于默认的 30 秒连接,因此 TransactionScope 不是问题。

关于entity-framework - Entity Framework 事务代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48153582/

相关文章:

entity-framework - Entity Framework MapToStoredProcedures - 忽略参数

nhibernate - 失败的 CaSTLe ActiveRecord TransactionScope 导致以后的查询无效

transactions - SQL Server 2000 和 System.Transactions.TransactionScope()

c# - 我需要通过 try/catch 包装一个 TransactionScope 吗?

sql - newid() 与 Entity Framework 6 Code First

c# - Entity Framework 6 键和列属性去哪儿了

javascript - 发布时更改 oData 条目中的属性。 [WCF 数据服务 + EF + SQL Express]

c# - 我将如何在数据库中实现标签?

entity-framework - Entity Framework DbSet<?> - 编译时未知的数据库列名

c# - 测试 Linq 查询 EF 和存储库模式