实体框架执行插入时应该进行更新

时间:2010-08-04 08:34:43

标签: entity-framework

我对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 个答案:

答案 0 :(得分:1)

在调用SaveChanges之前尝试添加这些行:

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

更新

请尝试使用此Institution

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