2013-01-31 2 views
2

작업 집합에서 하나의 작업이 실패하면 SQL Server에서 이전 작업을 롤백하는 방법에 대한 특정 게시물을 찾을 수 없습니다.하나의 작업이 실패 할 경우 롤백

예를 들어 데이터를 가져 오기 위해 하나의 쿼리를 사용하여 context.saveChanges() 행을 추가 한 다음 두 번째 및 세 번째 삽입이 수행됩니다.

좋아, 마지막 삽입이 실패하므로 3 개의 삽입 이전 상태로 db 상태를 가져 오려고합니다.

저는 EF4 및 SQL Server 2008 R2 + Asp Net MVC 4/C#을 사용하고 있습니다.

거래가 유일한 방법입니까? 작업이 하나씩 (프로그래밍 방식으로) 저장되었으므로 하나만 context.saveChange()이 아니라 롤백을 수행하는 방법을 잘 모르겠습니다.

답변

4

TransactionScope를 사용하여 이와 같이 "중첩 트랜잭션"을 수행 할 수 있습니다. 나는 영업 이익은 여러 번 SaveChanges``호출 질문을 이해

는 지금까지

using (var transScope = new TransactionScope()) 
{ 

    //add something 
    context.SaveChanges(); 

    //do something else 
    context.SaveChanges(); 

    if (foo == bar) //check that it worked fine 
    { 
     transScope.Commit(); 
    } 
} 
+0

감사합니다. 그것이 내가 찾고 있었던 것이다. –

0

글쎄, 아무 것도하지 마라. SaveChanges는 이미 내부적으로 트랜잭션을 사용했습니다. 원자 적입니다. 변경 사항이 저장되거나 저장되지 않습니다.

+2

에 논리를 감싸. –

관련 문제