如何在EntityFramework中回滚事务?

时间:2015-10-03 12:48:12

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

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

我的问题是如何确保只有当关于该特定课程的交易(添加,编辑,删除)保存到TransactionTable中时,才能保存CourseTable中的条目

CourseTable

http://codepen.io/ponciusz/pen/NGpXPB

TransactionTable

enter image description here

控制器

do {
    try self.privateManagedObjectContext!.save()
} catch {
    print("can't save to private context")
}

mainManagedObjectContext?.performBlock({
    do{
        try self.mainManagedObjectContext!.save()
    } catch {
        print("can't save to main context")
    }
})

1 个答案:

答案 0 :(得分: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);
                    }

                }
            }