如果一次保存失败,有没有办法回滚实体框架会话?

时间:2016-11-18 22:13:10

标签: asp.net-mvc entity-framework

假设我有一个学生教师视图模型,您可以保存教师,然后保存该教师的学生列表。

    public class StudentTeacherVM()
    {
        public Teacher teacher{ get; set; }
        public List<Student> students { get; set; }
    }

用户填写教师并提供学生列表。然后我将所有这些保存到数据库中。我保存老师,返回新的老师,然后循环学生,贴上新老师,然后保存学生。 (按照代码进行演示,我的实际代码大不相同)。

    public ActionResult SaveStudent(StudentTeacherVM model)
    {
        Repository repo = new Repository();

        repo.SaveTeacher(model);

        foreach(var s in model.students)
        {
            //add the new teacherid then save the student
            repo.SaveStudent(model);
        }
    }

每个repo调用都会打开和关闭数据库连接,因为我使用的是

using(var db = new MyEntity)
{
    db.Teacher.Add(newTeacher);
}

我想做的是,如果其中一名学生未能保存,我现在吐出整个学生名单,但我还需要回去删除刚刚输入的新老师。

看起来我可以做一个&#34;如果学生未能保存,请删除老师,其中teacherid = newTeacherId&#34;它似乎有效。

我想知道是否存在某种内置&#39;回滚&#39;我可以在这里使用的功能,如果有,我会被取消资格&#34;从使用它,因为我打开和关闭数据库连接?

1 个答案:

答案 0 :(得分:2)

您的存储库类需要公开事务范围。

请参阅:https://msdn.microsoft.com/en-us/library/dn456843