修改bug 提交出錯:操作失敗: 無法更改關系,因為一個或多個外鍵屬性不可以為 null


提交出錯:操作失敗: 無法更改關系,因為一個或多個外鍵屬性不可以為 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM