如何在 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/