2011-08-05 30 views
0

在我们的应用程序中,在保存操作过程中,我们将数据转换为近15个子表。发生某些错误时,表中的数据存在差异。所以我们决定使用TransactionScope。当我们使用它时,它给出错误说“事务已中止”,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() 

我们的代码看起来像

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(); 
      } 

在此先感谢

+0

是否抛出的异常有一个内部异常,如果是的话,它的消息? – hatchet

+0

InnerException为空 – jvm

+0

是否必须对事务超时执行任何操作? – jvm

回答

0

的TransactionScope可以与多个DataContexts使用,但只要 多于一个连接所涉及的事务将升级 到MSDTC/XA /分布式事务。为此,您需要 将MSDTC运行在您运行代码的系统上以及 数据库服务器上。

或者,如果您在transactionscope中创建了显式连接并将其传递给datacontexts,则可以避免升级到分布式事务 ;这样的的TransactionScope不会 升级为分布式事务,而不会依赖MSDTC ...

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

相关问题