提交出錯:操作失敗: 無法更改關系,因為一個或多個外鍵屬性不可以為 null。對關系作出更改后,會將相關的外鍵屬性設置為 null 值。如果外鍵不支持 null 值,則必須定義新的關系,必須向外鍵屬性分配另一個非 null 值,或必須刪除無關的對象。
//處理入庫計划狀態 if (partsPlannedWarehouseOrder != null) { foreach(var detail in partsPlannedWarehouseOrder.PartsInPlanOrderDetails.Where(p => p.PlannedQuantity == 0).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 == 0)) 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 == 0).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 == 0)) 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