关系无法更改,因为一个或多个外键属性是不可空的。当我对一个实体进行GetById()并将子实体的集合设置为来自MVC视图的新列表时,我会得到这个错误。操作失败:由于一个或多个外键属性不可空,关系无法更改。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。我不太明白这句话:关系无法更改,因为一个或多个外键属性是不可空的。为什么我要改变两个实体之间的关系?在整个应用程序的整个生命周期中,它应该保持不变。异常发生的代码是简单地将集合中的修改子类分配给现有的父类。这将有望满足儿童班的取消、新班级的增加和修改的需要。我认为实体框架会处理这个问题。代码行可归纳为:var thisParent = _repo.GetById(1);thisParent.ChildItems = modifiedParent.ChildItems();_repo.Save();
3 回答
Smart猫小萌
TA贡献1911条经验 获得超7个赞
在组合中,创建父对象时创建子对象,在其父对象销毁时销毁子对象。
在聚合中,子对象可以存在,而不考虑其父对象。
对于组合:它期望子对象具有一个复合主键(ParentID,child ID)。这是故意的,因为孩子的ID应该在他们的父母的范围之内。 对于聚合:它期望子对象中的外键属性是可空的。
解决办法:
context.Children.RemoveRange(parent.Children);
parent.Children.Clear();
添加回答
举报
0/150
提交
取消