2010-08-04 60 views
1

我有一個真正的EF問題v1。我有一個相當大的EDMX,可能映射了50個實體,但是這個實體讓我感到悲傷。實體框架執行一個插入,當它應該做一個更新

該實體具有映射到實際上是參考表的其他實體的映射,但出於某種原因,它試圖執行插入操作,而不是僅更新自身。

這裏是我的代碼片段:

using (var context = new someEntities()) { 
    var studentCourseJoin = 
     context.StudentCourseJoinSet.Where(o => o.Code == scjCode).First(); 

    studentCourseJoin.EntryStatus = new EntryStatus { Code = viewModel.StudentDetails.EntryStatusCode }; 
    studentCourseJoin.ParentalInHigherEducation = new ParentalInHigherEducation { Code = viewModel.StudentDetails.ParentalInHigherEducationCode }; 
    studentCourseJoin.School = new School { Code = viewModel.StudentDetails.SchoolCode }; 

    studentCourseJoin.Institution = new Institution { Code = viewModel.StudentDetails.InstitutionCode }; 

    studentCourseJoin.LastSchoolEndYear = viewModel.StudentDetails.LastSchoolEndYear; 
    studentCourseJoin.LastInstitutionEndYear = viewModel.StudentDetails.LastInstitutionEndYear; 

    // Blows up here trying to do an insert on the studentCourseJoin.Institution. 
    // But if I removed this one, then it will blow up on another one. 
    context.SaveChanges(true); 
} 

如果任何人有任何想法,請,他們將有很大的幫助。

回答

1

嘗試調用SaveChanges之前添加這些行:

ObjectStateEntry entry = context.ObjectStateManager.GetObjectStateEntry(studentCourseJoin); 
entry.ChangeState(EntityState.Modified); 

更新:

嘗試此Institution代替:

studentCourseJoin.Institution = context.Institutions.FirstOrDefault(i => i.Code == viewModel.StudentDetails.InstitutionCode); 
+0

您好,感謝您的答覆,也似乎沒有是一個ChangeState方法? – 2010-08-04 10:57:19

+0

是的,對不起,這是你正在使用的EFv1。嘗試使用entry.SetModified()來代替。 – Yakimych 2010-08-04 11:26:17

+0

還沒有工作。 studentCourseJoin對象被設置爲已修改,但是我上面定義的關係被添加,我認爲這是正確的。 我已經檢查了數據庫和參考表中存在的值。想法? – 2010-08-04 11:32:50

相關問題