【问题标题】:Web API: Multi thread when using Transaction (Entity Framework)Web API:使用事务时的多线程(实体框架)
【发布时间】:2017-05-07 13:36:23
【问题描述】:

我有 2 个可以通过 API 相互通信的系统。 这是我的代码 系统 A:

using (var transaction = new TransactionScope())
{
    var myBook = _bookRepository.Table.FirstOrDefault(x => x.Id == request.bookID);
    myBook.AssigneeId = null;
    _bookRepository.Update(ticket);
    var result = await _anotherBApi.ApproveBookAsync(request.bookID);           
    if (result.ShStatus != ResponseStatus.Success)
    {
        result.ErrorType = ErrorType.Error;
        return result;
    }
    transaction.Complete();
}

函数ApproveBookAsync(request.bookID) 将调用B 系统 的API。处理后,B系统回调A系统的API更新Book的信息(同上)。

在我的代码之上。我不能transaction.Complete(); 因为当 B 系统调用 A 系统的 API 时,它会创建新事务。

期望:我想一步步处理为:

  1. 更新 Book 实例的新信息(示例 ID = 1)
  2. 调用B系统API(B系统也调用A系统A更新Book ID = 1后)
  3. 当调用 B 系统失败时,我想回滚之前的所有更改。如果成功,提交。

【问题讨论】:

    标签: entity-framework asp.net-web-api


    【解决方案1】:

    TransactionScope 块中使用 async/await 时,您需要选择您的事务需要像这样跨线程延续流动:

    using (var transaction = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
    {
        // Your code that contains some calls to async method.
        transaction.Complete();
    }
    

    【讨论】:

    • 我是否正确,这在不同的进程中不起作用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多