1

질문 :트랜잭션 Rollback()이 예외를 throw 할 수 있습니까? EF 코어와 관리 trasactions 관련

이 그 어느 try 블록 내부에 배치하는 것이 만들 수되도록 IDbContextTransaction.Rollback()는 예외를 반환 할 기회가 있습니까?

try 
    { 
     //... 
     if(condition) 
      transaction.Commit(); 
     else 
      throw methodReturn.Exception; 
    } 
    catch (Exception e) 
    { 
     try  // Does this try make any sense? 
     { 
      transaction.Rollback(); 
     } 
     catch 
     { 
      // Log 
     } 
     throw e; 
    } 

PD :이 특정 상황에서 그렇게 수동 .Rollback() 호출이 실제 코드에 요구되는 using 문으로 트랜잭션을 포함 할 수 없습니다.

+1

이 실패 할 수 있습니다 오류 처리 내에서 롤백을 지정합니다. 예를 들어 트랜잭션을 롤백하는 동안 SqlConnection이 중단되면 예외가 발생합니다. 추가 정보 : https://msdn.microsoft.com/en-us/library/zayx5s0h(v=vs.110).aspx –

+1

인터페이스에 대해 이야기 할 때 대답은 다음과 같습니다. 실제 구현에 따라 다릅니다. 그러나 일반적으로 : 예, 트랜잭션을 이미 커밋했거나 이미 롤백했을 때'SqlTransaction.Rollback()'이'InvalidOperationException'을 던져 버릴 수 있습니다 (MSDN의 다음 링크 참조 : https : // msdn Microsoft.com/ko/kr/library/zayx5s0h (v = vs.110) .aspx) – bassfader

답변

0

그렇지까지입니다 시간의 대부분 :

  1. 교착 상태 감지
  2. 없음 인터넷 연결
  3. 논리적 및 물리적으로 일관성있는 연결
  4. 종료, 정전, 예기치 않은 종료

이러한 상황을 해결하려면 다음을 수행 할 수 있습니다.

  1. Xact_Abort 설정을 사용하십시오. SET XACT_ABORT가 ON이면 Transact-SQL 문에서 런타임 오류가 발생하면 전체 트랜잭션이 종료되고 롤백됩니다. SET XACT_ABORT가 OFF이면 오류를 발생시킨 Transact-SQL 문만 롤백되고 트랜잭션은 계속 처리됩니다. 오류의 심각도에 따라 SET XACT_ABORT가 OFF 인 경우에도 전체 트랜잭션이 롤백 될 수 있습니다. OFF가 기본 설정입니다.

  2. 캐치하고 오류를 처리하고, 물론 롤백의