2011-08-05 10 views
0

응용 프로그램에서 저장 작업 중 거의 15 개의 하위 테이블에 대한 데이터입니다. 오류가 발생하면 테이블에 데이터 불일치가 발생합니다. 그래서 우리는 TransactionScope를 사용하기로 결정했습니다. 우리가 "Transaction has aborted"라는 오류 메시지를 표시하면 StackTrace가 다음과 같이 표시됩니다.TransactionScope 사용시 트랜잭션이 중단되었습니다.

at System.Transactions.TransactionStateAborted.BeginCommit(InternalTransaction tx, Boolean asyncCommit, AsyncCallback asyncCallback, Object asyncState) 
    at System.Transactions.CommittableTransaction.Commit() 
    at System.Transactions.TransactionScope.InternalDispose() 
    at System.Transactions.TransactionScope.Dispose() 

우리의 코드는 TransactionScope에 여러 DataContexts 함께 사용할 수 있지만 곧 트랜잭션을 참여 둘 이상의 연결 등이 에스컬레이트

+0

던져 예외가 내부 예외가 있고, 그렇다면, 어떻게 그 메시지입니다합니까 ? – hatchet

+0

InnerException이 null입니다. – jvm

+0

트랜잭션 시간 초과로 어떤 작업을해야합니까? – jvm

답변

0

사전에

using (TransactionScope tScope = new TransactionScope()) 
       { 
        dataManager.AddFood(food); 
        if (!ModelState.IsValid) 
         throw new ApplicationException("Model state is invalid"); 
        if (beingCloned) 
         food.IsUserFood = false; 



       dataManager.Save(); 
       if (!food.IsUserFood) 
        dataManager.GenerateSearchRecords(food.FoodID); 

       FoodManager foodManager = new FoodManager(); 
       foodManager.CopyFoodToHistory(food); 

       if (beingCloned) 
       { 
        foodManager.CreateUserFoodCopyForClonedFood(food); 
        HttpPostedFileBase file = ControllerContext.HttpContext.Request.Files["Image"]; 

        if (file != null && file.FileName.Length > 0) 
         foodManager.UpdateMediaCopyForClonedFood(food, true); 
        else 
         foodManager.UpdateMediaCopyForClonedFood(food); 
       } 
       tScope.Complete(); 
      } 

감사처럼 보인다 을 MSDTC/XA/분산 트랜잭션에 추가하십시오. 이를 작동 시키려면 코드가 실행되는 시스템과 데이터베이스 서버에서 MSDTC를 실행해야합니다.

또는 트랜잭션 범위 내에서 명시 적 연결을 만들고 을 datacontexts로 전달하면 분산 트랜잭션 으로 에스컬레이션되는 것을 방지 할 수 있습니다. 하여 TransactionScope가 분산 트랜잭션 (transaction)에게 이관하지 것이며, MSDTC에 의존하지 않습니다 그런 식으로 ...

https://stackoverflow.com/a/1592133/102937

관련 문제