2013-02-15 6 views
2

저장 프로 시저에 대한 다른 호출과 함께 아래 코드가 있습니다.linq to SQL 트랜잭션

내 문제는이 트랜잭션에 있기를 원한다. DB 메소드 중 하나가 실패하면 자동으로 보류중인 변경 사항을 롤백한다.

Stackoverflow/Microsoft 페이지에서 SubmitChanges가 이들을 트랜잭션으로 랩핑한다는 기사를 읽었습니다. spClearTablesForReplication 방법은 테이블을 지우고 나중에 코드에가 (테스트) 목적에 실패하고 다음 내 모든 테이블이

XalSqlDataContext db = new XalSqlDataContext(); 
db.spClearTablesForReplication(); 
db.spUpdateStockItemGroup(ConvertToXElement(typeof(List<StockItemGroup>), stockItemGroups)); 
db.spUpdateStockItemSubGroup(ConvertToXElement(typeof(List<StockItemSubGroup>), stockItemSubGroups)); 

db.SubmitChanges(); 

모든 단서/솔루션 (롤백되지 않음) 비어 있는지

문제는 이것 때문에.

답변

6

블록을 사용하여 TransactionScope에 코드를 감아 넣은 다음 코드가 transactionScope.Complete() 인 지점에 도달하지 않으면 롤백됩니다.

예 :

using (TransactionScope transactionScope = new TransactionScope()) 
{ 
    //code here 
    transactionScope.Complete(); 
} 
+0

그때 이렇게한다면 난 더 이상 SubmitChanges 필요하지 않습니다? – user1914109

+0

@ user1914109 다른 코드는 변경되지 않아야합니다. 당신이 사용하는 코드가 변경되어서는 안된다는 것을 제외하고, 당신이 생각하는 작업은 transactionScope 안에서 당신이 블럭을 사용하여 감싸 야하는 트랜잭션 (all or nothing)이어야한다. – dutzu

+0

결론 SubmitChanges가 트랜잭션에서 db 호출을 래핑하지 않습니다? – user1914109