0
我試圖教我自己的LINQ to SQL,並決定做一個小的MVC.NET項目讓我的腳溼。問題在於我很早就陷入了以下錯誤。不能保存更改使用LINQ to SQL有子鍵約束
我正在做一個高爾夫應用程序,所以我已經建立了數據庫,並得到了我的dbml類。該數據庫有一個course
表和一個hole
表。 hole
表通過其主鍵引用courseId
,並對其有一個外鍵約束。所以都非常標準。
我有我的控制器上的MVC動作,讓我來編輯課程信息(名稱,孔的信息,例如,面值和中風指數等)
當我做編輯後保存我收到以下錯誤。
「試圖刪除課程和空穴之間的關係。但是,這種關係的一個外鍵(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);
}
}
}
感謝您的回覆。 UpdateModel是對標準MVC Controller.UpdateModel()方法的調用。在這種情況下,它更新courseViewModel與客戶端的變化,所以更改courseViewModel.Course和courseViewModel.Course.Holes以及 – 2010-07-19 07:51:31
我試過這個建議,但現在得到: 「不能附加一個已存在的實體。 – 2010-07-19 12:34:57
看起來上下文永遠不會丟失,但UpdateModel會將FK字段設置爲null。最好將視圖模型與實體分開,發佈到視圖模型,並僅使用您希望修改的值對顯示的實體進行顯式更新。 – 2010-07-19 13:48:06