Entity framework 无法更改关系,因为一个或多个外键属性不可为null?

Entity framework 无法更改关系,因为一个或多个外键属性不可为null?,entity-framework,entity-framework-6,Entity Framework,Entity Framework 6,根据这里公认的答案: 在使用entity.Children.Clear()更新实体之前,我已删除了所有子项: 我得到了这个错误: 操作失败:无法更改关系,因为 一个或多个外键属性不可为空。当 对关系进行更改时,相关的外键属性为 设置为空值。如果外键不支持空值, 必须定义新关系,外键属性必须为 指定了另一个非空值,或者必须为不相关的对象 删除 出现此问题的原因是,您试图从关系的一端删除某些内容,而不是从另一端删除,并且另一端的内容不可为空 最简单的解决方案是启用级联删除,然后让EF担心细节,但如果

根据这里公认的答案:

在使用
entity.Children.Clear()
更新实体之前,我已删除了所有子项:

我得到了这个错误:

操作失败:无法更改关系,因为 一个或多个外键属性不可为空。当 对关系进行更改时,相关的外键属性为 设置为空值。如果外键不支持空值, 必须定义新关系,外键属性必须为 指定了另一个非空值,或者必须为不相关的对象 删除


出现此问题的原因是,您试图从关系的一端删除某些内容,而不是从另一端删除,并且另一端的内容不可为空


最简单的解决方案是启用级联删除,然后让EF担心细节,但如果您必须处理此问题,那么您需要做的是删除所有项目,按原样使用,但也要在每个项目上将相关项目设置为null,如果不能为null,您也必须删除相关项目。

我想您在某个表中指定了一个外键,该外键不可为null。。尝试删除该关系我是否应该在关系的另一端定义导航属性以删除它?(保持一对多关系的一端)?
public static JsonViewData AddOrUpdate(ModelDBContext context, GENCompanyViewModel companyModel, string userName, string userId)
        {
            try
            {
                var company = new GENCompany();


                if (companyModel.Id > 0) //Update
                {
                    company = context.Companies.Find(companyModel.Id);
                    context.Entry(company).State = EntityState.Modified;

                    company.Vehicles.Clear();
                    company.Phones.Clear();
                    company.Emails.Clear();

                    company.InjectFrom(companyModel);
                    company.DateUpdated = DateTime.Now;
                }
                else //Add
                {
                    company.InjectFrom(companyModel);
                    company.CreatedById = new Guid(userId);
                    context.Companies.Add(company);

                    context.SaveChanges(userName);

                }




                if (companyModel.Vehicles.Any())
                {
                    foreach (var vehicleModel in companyModel.Vehicles)
                    {
                        var vehicle = context.Vehicles.Find(vehicleModel.Id);
                        context.Entry(vehicle).State = EntityState.Unchanged;
                        company.Vehicles.Add(vehicle);
                    }
                }


                if (companyModel.Phones.Any())
                {
                    foreach (var phoneModel in companyModel.Phones)
                    {
                        var phone = new GENCompanyPhone();
                        phone.InjectFrom(phoneModel);
                        company.Phones.Add(phone);
                    }
                }

                if (companyModel.Emails.Any())
                {
                    foreach (var emailModel in companyModel.Emails)
                    {
                        var email = new GENCompanyEmail();
                        email.InjectFrom(emailModel);
                        company.Emails.Add(email);
                    }
                }



                context.SaveChanges(userName);
                return new JsonViewData { IsSuccess = true, Message = "Added Successfully" };
            }
            catch (Exception ex)
            {
                return new JsonViewData { IsSuccess = false, Message = ex.InnerException?.InnerException?.Message ?? ex.InnerException?.Message ?? ex.Message };
            }
        }