【发布时间】:2016-01-23 02:21:22
【问题描述】:
场景是:
我有两张桌子。
- 注册
- 注册主题。
它们之间存在一对多的关系。
我正在尝试通过删除 EnrollmentSubject 中的子项并添加新子项来更新 Enrollment,当我在 context.SaveChanges(); 中遇到以下错误时在 Entityframework 6.0 中
The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted
这是我的代码:
public string UpdateEnrollment(EnrollmentDTO enrollDetail)
{
try
{
List<EnrollmentSubjectDTO> subjectsDTO = new List<EnrollmentSubjectDTO>();
using (SMSEntities em = new SMSEntities())
{
Enrollment enroll = (from aa in em.Enrollments.Include("EnrollmentSubjects")
where aa.EnrollmentId == enrollDetail.EnrollmentId
select aa).FirstOrDefault<Enrollment>();
enroll.Status = enrollDetail.Status;
enroll.RegNo = enrollDetail.RegNo;
enroll.PkgId = enrollDetail.PkgId;
enroll.SectionId = enrollDetail.SectionId;
enroll.AdmittedDate = enrollDetail.AdmittedDate;
enroll.StudentId = enrollDetail.StudentId;
subjectsDTO = enrollDetail.EnrollmentSubjects.ToList<EnrollmentSubjectDTO>();
List<EnrollmentSubject> enrolllist = enroll.EnrollmentSubjects.ToList<EnrollmentSubject>();
if (enroll.ClassId != enrollDetail.ClassId && enroll.GroupId != enrollDetail.GroupId)
{
foreach (EnrollmentSubject obj in enrolllist)
{
enroll.EnrollmentSubjects.Remove(obj);
}
}
enroll.ClassId = enrollDetail.ClassId;
enroll.GroupId = enrollDetail.GroupId;
for (int i = 0; i < subjectsDTO.Count; i++)
{
if (subjectsDTO[i].EnrollmentSubjectId == 0)
{
enroll.EnrollmentSubjects.Add(new EnrollmentSubject()
{
Status = subjectsDTO[i].Status,
SubjectId = subjectsDTO[i].SubjectId
});
}
else
{
enrolllist[i].SubjectId = subjectsDTO[i].SubjectId;
enrolllist[i].Status = subjectsDTO[i].Status;
}
}
// em.Enrollments.Add(enroll);
em.SaveChanges();
return "Enrollment Updated";
}
}
catch(Exception ex)
{
return ex.Message.ToString();
}
}
请指导我
【问题讨论】:
标签: c# database entity-framework