entity-framework - Entity Framework 中的异步提交?

标签 entity-framework transactions

如何在 Entity Framework 中异步提交事务?

using (var transaction = this.db.Database.BeginTransaction())
{
    this.db.DoSomething();
    await this.db.SaveChangesAsync().ConfigureAwait(false);

    // note .Commit isn't async but it involves network i/o
    transaction.Commit();
}

我想让 .Commit 异步,但我在 DbContextTransaction 中没有看到合适的 API

最佳答案

为了确定同样的事情,我浏览了 DbContext.SaveChangesAsync() 的 EF6 源代码。查看 EF 如何处理异步调用中隐式事务的提交。

同意 Ivan 对上述问题的评论,EF 或 System.Data 中没有异步提交机制。 .

ObjectContext.ExecuteInTransactionAsync ,这是为 SaveChangesAsync 处理事务的地方,异步更新例程简单地包装在 EntityConnection.BeginTransaction 中和同步 DbTransaction.Commit .如果有一个鲜为人知的异步Commit ,我认为它会在这里使用。

这似乎是 System.Data 异步产品中的一个大漏洞。因为一个大事务可能需要很长时间才能提交,从而在进程中占用一个线程。因此,具有大量数据库更新事件的服务器应用程序可能会失去异步代码的许多好处。

关于entity-framework - Entity Framework 中的异步提交?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44076174/

相关文章:

c# - DbContext 是一项昂贵的操作吗?

java - Spring Hibernate 事务回滚不起作用

c# - 有没有办法测试一个潜在的僵尸交易,看看它是否可以回滚?

sql - PostgreSQL "no transaction in progress"

entity-framework - EF Code First DBContext 和事务

c# - 如何将项目添加到列表

c# - Entity Framework 超时

sql-server - 为什么插入带有外键引用另一个快照隔离事务中 pk 修改的行的行会导致事务挂起?

c# - Entity Framework - 不映射到数据库表的抽象基类

c# - Entity Framework 事务