Asp.net mvc 无法更改关系,因为MVC 4中的一个或多个外键属性不可为空
单击“保存(更新)我的表单”后出现此错误: 无法更改关系,因为一个或多个外键属性不可为null。对关系进行更改时,相关外键属性设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象 这是我的控制器(swich couse问题中的“保存”案例):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);
有什么问题吗…试试下面的方法
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)如果更改dbUser.CustomerTables.Remove(自定义),则代码>确定;到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();