Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 无法更改关系,因为MVC 4中的一个或多个外键属性不可为空_Asp.net Mvc_Entity Framework - Fatal编程技术网

Asp.net mvc 无法更改关系,因为MVC 4中的一个或多个外键属性不可为空

Asp.net mvc 无法更改关系,因为MVC 4中的一个或多个外键属性不可为空,asp.net-mvc,entity-framework,Asp.net Mvc,Entity Framework,单击“保存(更新)我的表单”后出现此错误: 无法更改关系,因为一个或多个外键属性不可为null。对关系进行更改时,相关外键属性设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象 这是我的控制器(swich couse问题中的“保存”案例): 有什么问题吗…试试下面的方法 foreach (var child in modifiedParent.ChildItems) { context.Childs.Attach(child);

单击“保存(更新)我的表单”后出现此错误:

无法更改关系,因为一个或多个外键属性不可为null。对关系进行更改时,相关外键属性设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象

这是我的控制器(swich couse问题中的“保存”案例):


有什么问题吗…

试试下面的方法

foreach (var child in modifiedParent.ChildItems)
{
    context.Childs.Attach(child); 
    context.Entry(child).State = EntityState.Modified;
}
context.SaveChanges();
请参阅以下链接


有一种更简单的方法来解决这个问题。
实际上这是因为你有一对多的关系。当你想删除一方时,你有两种情况;您可以选择“级联删除”,也可以选择“无”。
如果选择第一个选项,则删除1面时将删除所有多面图元。
您可以在实体图中设置此选项。您只需选择关系并将“End1 OnDelete”属性设置为级联

我遇到了这条消息,结果是我将对象从其集合中删除后,将其标记为已修改,而不是将其删除

例如,你不想打电话 context.Entry(child.State=EntityState.Modified
如果事实上您正试图删除该子项

相反,除了从集合中删除子对象外,还可以尝试类似context.DeleteObject(child)的操作

  • 我没有得到确切的代码,因为我的经验是使用Dev Express XAF ObjectSpace,它可以使用((EFObjectSpace)ObjectSpace)转换为ObjectContext
      我遇到了这个问题,解释起来很复杂(请原谅这个类比),好消息是解决方案非常简单


      假设我有一个一对多关系的记录,它也有一个关系。(一辆“汽车”有很多“人”,“人”有很多“孩子”)。将人员从车上移开时发生错误。做一个
      db.Cars.Remove(人)。导致了一个无关的错误。为了解决这个问题,我做了一个
      db.Cars.Persons.RemoveRange(children)确定;到dbContext.Entry(custom.State=EntityState.Deleted;修复了这个问题,但是简单的添加(save不起作用)可能会重复。是否有命令标记要执行的delete语句,而无需从C#/EntityFramework代码级联?
      
      foreach (var child in modifiedParent.ChildItems)
      {
          context.Childs.Attach(child); 
          context.Entry(child).State = EntityState.Modified;
      }
      context.SaveChanges();