【问题标题】:How to rollback a transaction in EntityFramework?如何在 EntityFramework 中回滚事务?
【发布时间】:2015-10-04 00:18:20
【问题描述】:

我有两个名为 Courses 和 Transactions 的数据库表。Courses 存储特定课程的详细信息,而 Transactions 表存储特定用户执行的事务的详细信息。

我的问题是如何确保仅当有关特定课程的事务(添加、编辑、删除)保存到事务表中时才保存 CourseTable 中的条目

课程表是

事务表是

控制器是

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

                }
    }

【问题讨论】:

    标签: asp.net-mvc-4 entity-framework-4


    【解决方案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);
                        }
    
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 2014-11-29
      • 1970-01-01
      • 2012-12-01
      • 2017-06-14
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 2021-10-17
      相关资源
      最近更新 更多