Entity Framework, выполняющий вставку, когда он должен делать обновление - PullRequest
1 голос
/ 04 августа 2010

У меня реальная проблема с 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 Ответ

1 голос
/ 04 августа 2010

Попробуйте добавить эти строки перед вызовом SaveChanges:

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

Обновление:

Попробуйте вместо Institution:

studentCourseJoin.Institution = context.Institutions.FirstOrDefault(i => i.Code == viewModel.StudentDetails.InstitutionCode);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...