【问题标题】:The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable, asdf操作失败:无法更改关系,因为一个或多个外键属性不可为空,asdf
【发布时间】:2016-01-23 02:21:22
【问题描述】:

场景是:

我有两张桌子。

  1. 注册
  2. 注册主题。

它们之间存在一对多的关系。

我正在尝试通过删除 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


    【解决方案1】:

    我的问题解决了…… 我正在从父级中删除它,子级记录成为孤儿,父=null 在所需的关系中,没有父级,子级不能存在。但我他们在上下文中,所以我也将它们从上下文中删除。

     if (enroll.ClassId != enrollDetail.ClassId && enroll.GroupId != enrollDetail.GroupId)
                        {
                            foreach (EnrollmentSubject obj in enrolllist)
                            {
    
                                enroll.EnrollmentSubjects.Remove(obj);
                                em.EnrollmentSubjects.Remove(obj);
                            }
                        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-16
      • 2013-10-19
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多