2017-11-14 16 views
0

たUnitOfWork:私は以下のような方法を持ってどのようにログをロールバックし、維持するために

using (var unitOfWork = _unitOfWorkManager.Begin()) 
{ 
    var result = await ExcuteOperator(input); 
    if (!result.WorkflowStatus) 
    { 
     unitOfWork.Dispose(); 
    } 
    unitOfWork.Complete(); 
} 


public async Task<ExecuteOperatorOutput> ExcuteOperator(ExecuteOperatorInput input) 
{     
    //Doing something 
    DoSomething(input); 

    //Insert log 
    await _logRepository.InsertAsync(logInput); 

    //Recursive 
    return await ExcuteOperator(input); 
} 

私の質問は:unitOfWork.Complete()前に投げる例外なく手動unitOfWorkをロールバックし、挿入されたログを保持するためにどのように?

+1

。 – aaron

+0

これは、自動的にロールバックさせるために 'unitOfWork.Complete()'の前に例外をスローする必要があることを意味しますか? –

+0

ありがとうございました.2番目の質問はどうですか?トランザクションがロールバックされた後にログを保持する方法 –

答えて

2

unitOfWorkを手動でロールバックする方法はありません。

参照の根拠/試み:https://github.com/aspnetboilerplate/aspnetboilerplate/issues?q=rollback

興味のある読者は、問題を試み、解決することを歓迎している、と述べました。

トランザクションがロールバックされた後もログを保持する方法はありますか?

完了します新しいunitOfWorkを開始します:手動で `unitOfWork`をロールバックする方法はありません

public async Task<ExecuteOperatorOutput> ExcuteOperator(ExecuteOperatorInput input) 
{     
    //... 

    using (var unitOfWork = _unitOfWorkManager.Begin(TransactionScopeOption.RequiresNew)) 
    { 
     await _logRepository.InsertAsync(logInput); 
     unitOfWork.Complete(); 
    } 

    //... 
} 
関連する問題