2015-10-03 120 views
1

我有兩個數據庫表名爲課程和Transactions.Courses存儲特定課程的詳細信息和Transactions表存儲由特定用戶執行的交易的詳細信息。如何在EntityFramework中回滾事務?

我的問題是如何確保交易時(添加,編輯,刪除)關於特定課程保存到TransactionTable

CourseTable在CourseTable該條目只保存在

enter image description here

TransactionTable是

enter image description here

控制器是

 POST: /Course/Add 
    [HttpPost] 
    public ActionResult Add(CourseVM _mdlCourseVM) 
    { 
      string actionName=this.ControllerContext.RouteData.Values["action"].ToString(); 
       string controllerName=this.ControllerContext.RouteData.Values["controller"].ToString(); 

       Course _course = new Course(); 
       _course.Duration = _mdlCourseVM.Course.Duration; 
       _course.DurationMode = _mdlCourseVM.DurationModeId; 
       _course.InstalmentFee = _mdlCourseVM.Course.InstalmentFee; 
       _course.Name = _mdlCourseVM.Course.Name; 
       _course.SingleFee = _mdlCourseVM.Course.SingleFee; 

       _db.Courses.Add(_course); 

       int i = _db.SaveChanges(); 

       if (i > 0) 
       { 
        Common _cmn=new Common(); 

        //Add the transaction details 
        int k=_cmn.AddTransactions(actionName,controllerName,""); 

        //Want to commit changes to the coursetable here 
        if(k>0){       
         _db.commitTransaction() 
        } 
        //Want to rollback the committed transaction 
        else{       
         _db.rollbackTransaction(); 
        } 

       } 
    } 

回答

1

我用System.Transactions。希望任何人以同樣的場景會發現它有用解決了上述情景。

using (TransactionScope _ts = new TransactionScope()) 
       { 
        string actionName = this.ControllerContext.RouteData.Values["action"].ToString(); 
        string controllerName = this.ControllerContext.RouteData.Values["controller"].ToString(); 

        Course _course = new Course(); 
        _course.Duration = _mdlCourseVM.Course.Duration; 
        _course.DurationMode = _mdlCourseVM.DurationModeId; 
        _course.InstalmentFee = _mdlCourseVM.Course.InstalmentFee; 
        _course.Name = _mdlCourseVM.Course.Name; 
        _course.SingleFee = _mdlCourseVM.Course.SingleFee; 

        _db.Courses.Add(_course); 
        int i = _db.SaveChanges(); 

        if (i > 0) 
        { 
         Common _cmn = new Common(); 
         int k = _cmn.AddTransactions(actionName, controllerName, "",Session["UserId"].ToString()); 
         if (k > 0) 
         { 
          _ts.Complete(); 
          return Json(new { message = "success" }, JsonRequestBehavior.AllowGet); 
         } 
         else 
         { 
          return Json(new { message = "error" }, JsonRequestBehavior.AllowGet); 
         } 

        } 
        else 
        { 
         return Json(new { message = "error" }, JsonRequestBehavior.AllowGet); 
        } 

       } 
      }