2017-05-07 50 views
-1

我有2個系統可以通過API相互通信。 這裏是我的代碼 系統A:Web API:使用事務(實體框架)時的多線程

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系統回電一個系統的API來更新書籍的信息(上面的一樣)。

上面我的代碼。我不能transaction.Complete();,因爲當B系統調用系統的API時,它會創建新的事務。

期待:我想處理步步爲:

  1. 更新Book實例的新信息(試樣ID = 1)
  2. 呼叫到B系統的API(B之後系統也呼籲系統A更新Book ID = 1)
  3. 當呼叫B系統失敗時,我想要先回滾所有更改。如果成功,承諾。

回答

0

當使用異步/等待中TransactionScope塊,你需要選擇你需要的交易流動翻過螺紋延續這樣的:

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

我是與糾正這將無法工作在不同的流程? – NtFreX