提交出错:操作失败: 无法更改关系,因为一个或多个外键属性不可以为 null。对关系作出更改后,会将相关的外键属性设置为 null 值。如果外键不支持 null 值,则必须定义新的关系,必须向外键属性分配另一个非 null 值,或必须删除无关的对象。

  //处理入库计划状态
if (partsPlannedWarehouseOrder != null) {
foreach(var detail in partsPlannedWarehouseOrder.PartsInPlanOrderDetails.Where(p => p.PlannedQuantity == ).ToArray())
//partsPlannedWarehouseOrder.PartsInPlanOrderDetails.Remove(detail);
this.ObjectContext.PartsInPlanOrderDetails.DeleteObject(detail);
if (!partsPlannedWarehouseOrder.PartsInPlanOrderDetails.Any())
partsPlannedWarehouseOrder.Status = (int)DmsPartsPlannedOrderStatus.作废;
else if (partsPlannedWarehouseOrder.PartsInPlanOrderDetails.All(p => p.PlannedQuantity == p.CompletedQuantity))
partsPlannedWarehouseOrder.Status = (int)DmsPartsPlannedOrderStatus.完成;
else if (partsPlannedWarehouseOrder.PartsInPlanOrderDetails.All(p => p.CompletedQuantity == ))
partsPlannedWarehouseOrder.Status = (int)DmsPartsPlannedOrderStatus.生效;
else
partsPlannedWarehouseOrder.Status = (int)DmsPartsPlannedOrderStatus.部分完成;
UpdateToDatabase(partsPlannedWarehouseOrder);
UpdatePartsPlannedWarehouseOrderValidate(partsPlannedWarehouseOrder);
}
//处理出库计划状态
if (partsPlannedDeliveryOrder != null) {
foreach(var detail in partsPlannedDeliveryOrder.PartsOutPlannOrderDetails.Where(p => p.PlannedQuantity == ).ToArray())
// partsPlannedDeliveryOrder.PartsOutPlannOrderDetails.Remove(detail);
this.ObjectContext.PartsOutPlannOrderDetails.DeleteObject(detail);
if (!partsPlannedDeliveryOrder.PartsOutPlannOrderDetails.Any())
partsPlannedDeliveryOrder.Status = (int)DmsPartsPlannedOrderStatus.作废;
else if (partsPlannedDeliveryOrder.PartsOutPlannOrderDetails.All(p => p.PlannedQuantity == p.CompletedQuantity))
partsPlannedDeliveryOrder.Status = (int)DmsPartsPlannedOrderStatus.完成;
else if (partsPlannedDeliveryOrder.PartsOutPlannOrderDetails.All(p => p.CompletedQuantity == ))
partsPlannedDeliveryOrder.Status = (int)DmsPartsPlannedOrderStatus.生效;
else
partsPlannedDeliveryOrder.Status = (int)DmsPartsPlannedOrderStatus.部分完成;
UpdateToDatabase(partsPlannedDeliveryOrder);
UpdatePartsPlannedDeliveryOrderValidate(partsPlannedDeliveryOrder);
}

修改方法:用DeleteObject 方法代替Remove方法

                  例如://partsPlannedWarehouseOrder.PartsInPlanOrderDetails.Remove(detail);
                    this.ObjectContext.PartsInPlanOrderDetails.DeleteObject(detail);
不能修改正在遍历的集合,所以用remove是错的
DeleteObject只是将集合中的实体添标记为删除,并不是将实体移除集合,而是将实体添标记为EntityState.Deleted

修改bug 提交出错:操作失败: 无法更改关系,因为一个或多个外键属性不可以为 null的更多相关文章

  1. 操作失败: 无法更改关系,因为一个或多个外键属性不可以为 null

    报错:操作失败: 无法更改关系,因为一个或多个外键属性不可以为 null  . 同时修改主表和从表的数据,想用EF主表T_ReviewPlan中某个对象item删除item对应的从表T_ReviewS ...

  2. Navicat图形更改表结构的时,设置外键时出现1452错误

    原文地址:http://www.mamicode.com/info-detail-1296600.html 提示1452错误,如下图所示. 然后百度了一下,得到了一个靠谱的答案: 这是因为表设置了外键 ...

  3. mysql之字段的修改,添加、删除,多表关系(外键),单表详细操作(增删改)

    字段的修改.添加和删除 create table tf1( id int primary key auto_increment, x int, y int ); #修改 alter table tf1 ...

  4. MySQL数据库 外键,级联, 修改表的操作

    1.外键: 用来建立两张表之间的关系 - 一对多 - 多对多 - 一对一 研究表与表之间的关系: 1.定义一张 员工部门表 id, name, gender, dep_name, dep_desc - ...

  5. MySQL数据库建立外键失败的原因总结

    在MySQL数据库创建外键时,经常会发生一些错误,这是一件很令人头疼的事.一个典型的错误就是:Can’t create table... 的错误.在很多实例中,这种错误的发生都是因为mysql一直以来 ...

  6. PowerDesigner 12小技巧-pd小技巧-pd工具栏不见了-pd修改外键命名规则-pd添加外键

    PowerDesigner 12小技巧-pd小技巧-pd工具栏不见了-pd修改外键命名规则-pd添加外键 1. 附加:工具栏不见了 调色板(Palette)快捷工具栏不见了PowerDesigner ...

  7. 使用admin的步骤、必知必会13条、单表的双下划线、外键的操作、多对多的操作:

    MVC M: model 模型 与数据库交互 V: view 视图 HTML C:controller 控制器 流程 和 业务逻辑 MTV M:model ORM T:template 模板 HTML ...

  8. day42——外键的限制和解决方法、外键的三种约束模式、修改表(单表查询)

    day42 外键的限制和解决方法 可以添加外键关联的那个字段可以是 被唯一(unique)约束的字段 或者 主键 限制:+ 由于外键的使用,致使多个表之间产生了联系,当我们对这些表进行更新或删除操作的 ...

  9. 《Entity Framework 6 Recipes》中文翻译系列 (29) ------ 第五章 加载实体和导航属性之过滤预先加载的实体集合和修改外键关联

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-13  过滤预先加载的实体集合 问题 你想过滤预先加载的实体集合,另外,你想使用 ...

随机推荐

  1. 系统INIT 启动脚本的结构/etc/rc.d/init.d/*

  2. 13-H.264编码解码器的无线应用:1080P60 3D无线影音传输器

    H.264编码解码器的无线应用:1080P60 3D无线影音传输器 一.应用领域 家庭媒体娱乐中心 新闻现场采访 无线3D投影机 高清视频会议终端无线延长器 教学,医疗示教 考古,高档商业区域,监狱等 ...

  3. MySQL--11 备份的原因

    目录 一.备份的原因 二.备份的类型 三.备份的方式 四.备份策略 五.备份工具 六.企业故障恢复案例 1.模拟环境 2.模拟恢复数据过程: 一.备份的原因 运维工作的核心简单概括就两件事: 1)第一 ...

  4. 计蒜客NOIP模拟D1T2

    原题: 蒜头君有一棵有根树,树的每一边都有边权,蒜头君想知道任意两点间最短距离之和为多少.另外,由于各种原因,蒜头君的树的边的边权会发生若干次改变,蒜头君想让你告诉他,每一次改变后,任意两点间最短距离 ...

  5. 03.父工程pom、整合测试、SpringBootApplication注解

    父工程 idea点击spring-boot-starter-parent找到父工程spring-boot-dependencies模仿配置 父工程 <?xml version="1.0 ...

  6. GO富集分析 信号通路

    基因富集分析是分析基因表达信息的一种方法,富集是指将基因按照先验知识,也就是基因组注释信息进行分类. 信号通路是指能将细胞外的分子信号经细胞膜传入细胞内发挥效应的一系列酶促反应通路.这些细胞外的分子信 ...

  7. postman自动化接口测试

    背景描述 有一个项目要使用postman进行接口测试,接口所需参数有: appid: 应用标识: sign:请求签名,需要使用HMACSHA1加密算法计算,签名串是:{appid}${url}${st ...

  8. 【leetcode】1019. Next Greater Node In Linked List

    题目如下: We are given a linked list with head as the first node.  Let's number the nodes in the list: n ...

  9. Linux0.11内核源码——内核态进程切换的改进

    本来想自己写的,但是发现了一篇十分优秀的博客 https://www.cnblogs.com/tradoff/p/5734582.html system_call的源码解析:https://blog. ...

  10. git merge 上线操作流程

    switch to branch git merge 主干到分支解决冲突,解决冲突文件,冲突文件,add to index 检查文件无<<<<<<< .=== ...