修改bug 提交出错:操作失败: 无法更改关系,因为一个或多个外键属性不可以为 null
提交出错:操作失败: 无法更改关系,因为一个或多个外键属性不可以为 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的更多相关文章
- 操作失败: 无法更改关系,因为一个或多个外键属性不可以为 null
报错:操作失败: 无法更改关系,因为一个或多个外键属性不可以为 null . 同时修改主表和从表的数据,想用EF主表T_ReviewPlan中某个对象item删除item对应的从表T_ReviewS ...
- Navicat图形更改表结构的时,设置外键时出现1452错误
原文地址:http://www.mamicode.com/info-detail-1296600.html 提示1452错误,如下图所示. 然后百度了一下,得到了一个靠谱的答案: 这是因为表设置了外键 ...
- mysql之字段的修改,添加、删除,多表关系(外键),单表详细操作(增删改)
字段的修改.添加和删除 create table tf1( id int primary key auto_increment, x int, y int ); #修改 alter table tf1 ...
- MySQL数据库 外键,级联, 修改表的操作
1.外键: 用来建立两张表之间的关系 - 一对多 - 多对多 - 一对一 研究表与表之间的关系: 1.定义一张 员工部门表 id, name, gender, dep_name, dep_desc - ...
- MySQL数据库建立外键失败的原因总结
在MySQL数据库创建外键时,经常会发生一些错误,这是一件很令人头疼的事.一个典型的错误就是:Can’t create table... 的错误.在很多实例中,这种错误的发生都是因为mysql一直以来 ...
- PowerDesigner 12小技巧-pd小技巧-pd工具栏不见了-pd修改外键命名规则-pd添加外键
PowerDesigner 12小技巧-pd小技巧-pd工具栏不见了-pd修改外键命名规则-pd添加外键 1. 附加:工具栏不见了 调色板(Palette)快捷工具栏不见了PowerDesigner ...
- 使用admin的步骤、必知必会13条、单表的双下划线、外键的操作、多对多的操作:
MVC M: model 模型 与数据库交互 V: view 视图 HTML C:controller 控制器 流程 和 业务逻辑 MTV M:model ORM T:template 模板 HTML ...
- day42——外键的限制和解决方法、外键的三种约束模式、修改表(单表查询)
day42 外键的限制和解决方法 可以添加外键关联的那个字段可以是 被唯一(unique)约束的字段 或者 主键 限制:+ 由于外键的使用,致使多个表之间产生了联系,当我们对这些表进行更新或删除操作的 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (29) ------ 第五章 加载实体和导航属性之过滤预先加载的实体集合和修改外键关联
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 5-13 过滤预先加载的实体集合 问题 你想过滤预先加载的实体集合,另外,你想使用 ...
随机推荐
- 屏幕坐标点转UGUI坐标【包含屏幕适配】
using UnityEngine; public class ScreenToUI : MonoBehaviour { public const float UI_Width = 1366f; pu ...
- 2019-9-2-win10-uwp-打电话
title author date CreateTime categories win10 uwp 打电话 lindexi 2019-09-02 12:57:38 +0800 2018-2-13 17 ...
- RabbitMQ数据同步一致性解决方案
1.概述 我们知道在使用RabbitMQ时,生产者将消息发布出去之后,消息是否顺利到达broker代理服务器呢?默认情况下发布操作没有任何信息返回给生产者,也就是生产者是不知道消息有没有顺利到达bro ...
- https://blog.csdn.net/eguid_1/article/category/6270094
https://blog.csdn.net/eguid_1/article/category/6270094
- (ACM模板)二元组pair
#include<iostream> #include<cstdio> #include<utility> using namespace std; typedef ...
- oracle-SQL语句执行原理和完整过程详解
SQL语句执行过程详解 一条sql,plsql的执行到底是怎样执行的呢? 一.SQL语句执行原理 第一步:客户端吧语句发个服务端执行 当我们在客户端执行select语句时,客户端会把这条SQL语句发送 ...
- html5中play 方法和pause方法在video的应用
play();播放 pause();暂停 代码实例: <!DOCTYPE html> <html lang="en"> <head> <m ...
- Redis服务器中有75%受到恶意软件感染
尽管由于配置错误的服务器和应用程序而导致新的网络攻击不断出现,但人们仍然忽略安全警告. 近两个月前,中国知名黑客组织东方联盟研究人员警告说,一项针对开放Redis服务器的大规模恶意软件活动现在已经发展 ...
- EF框架实增删改查
数据库链接配置: <connectionStrings> <add name="XxzxWorkEntities" connectionString=" ...
- HashMap的底层原理 cr:csdn:zhangshixi
1. HashMap概述: HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变 ...