无法使用具有外键约束的LINQ to SQL保存对子表的更改

时间:2010-07-17 13:42:37

标签: asp.net-mvc linq-to-sql foreign-key-relationship

我正在尝试自学LINQ to SQL,并决定做一个小型的MVC.NET项目让我的脚湿透。问题是我很早就出现了以下错误。

我正在制作一个高尔夫应用程序,所以我已经设置了数据库并获得了我的dbml类。数据库有一个course表和一个hole表。 hole表通过其主键引用courseId并对其具有foreigh键约束。所以非常标准。

我的控制器上有一个MVC动作,允许我编辑课程信息(名称和孔信息,例如,标准杆和笔划索引等)。

当我在编辑后进行保存时,我收到以下错误。

试图删除一个Course和一个Hole之间的关系。但是,其中一个关系的外键(Hole.CourseId)不能设置为null

我调试了这个并且看不到任何问题。我是否需要在数据库上执行某些操作以允许我编辑具有外键约束的表?

以下是行动代码:

    [HttpPost]
    [ValidateInput(true)]
    public ActionResult Edit(int id, FormCollection collection)
    {
        var courseViewModel = new CourseViewModel { Course = _repository.GetCourse(id) };

        if (courseViewModel.Course == null)
        {
            return View("NotFound", string.Format("Course {0} Not Found", id));
        }

        try
        {
            UpdateModel(courseViewModel);
            _repository.SubmitChanges();

            return RedirectToAction("Index", "Course");
        }
        catch (Exception ex)
        {
            ModelState.AddRuleViolations(courseViewModel.Course.GetRuleViolations());
            ModelState.AddModelError("", ex.Message);

            return View(courseViewModel);
        }
    }

_repository看起来像这样:

    namespace Web.Repository
    {
        public class MyRepository
        {
            private MyDataContext db = new MyDataContext();

            public void SubmitChanges()
            {
                db.SubmitChanges();
            }

            public Course GetCourse(int id)
            {
                return db.Courses.SingleOrDefault(i => i.CourseId == id);
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

UpdateModel有什么作用?假设它在视图模型上对Course成员进行了更改,您可能需要考虑这样的存储库方法:

public void SaveCourse(Course course)
{
  db.Courses.Attach(course);
  db.SubmitChanges();
}