我正在使用ASP.NET MVC 5應用程序,我需要一個幫助來編輯父表時添加一個子表。即我需要插入一個子表並使用單個控制器方法更新父表。如何在ASP.Net MVC 5中保存父表時添加子表?
我的用例是在創建和編輯LabOrder(父表)時添加到表中的一組新的consumeInventories(子表)。在create方法中,它工作正常,即添加了一組新的consumeInventories,但在編輯方法中,它會導致錯誤。
我的模型: //父表
public class LabOrder
{
[Key]
public int LabOrderID { get; set; }
[Required]
public string OrderNo { get; set; }
[Required(ErrorMessage="The Order Date field is required."), DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
public DateTime OrderDate { get; set; }
[Required(ErrorMessage = "The Order Time field is required."), DataType(DataType.Time)]
public DateTime? OrderTime { get; set; }
[Required(ErrorMessage="The Hospital/ Clinic field is required.")]
public int EntityID { get; set; }
[Required]
public int LabOrderStatusID { get; set; }
[Required, Display(Name = "Patient")]
public int PatientID { get; set; }
}
//子表
public class ConsumedInventory
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ConsumedInventoryID { get; set; }
public int LabOrderID { get; set; }
public int InventoryItemID { get; set; }
public int ConsumedQuantity { get; set; }
public int EntityID { get; set; }
}
我的控制器代碼:
public ActionResult EditLabOrder(LabOrder lab)
{
if (ModelState.IsValid)
{
ConsumedInventory AddConsumedInventory = new ConsumedInventory();
foreach (var stockItem in lab.ConsumedInventories.ToList())
{
AddConsumedInventory.ConsumedQuantity = stockItem.ConsumedQuantity;
AddConsumedInventory.EntityID = stockItem.EntityID;
AddConsumedInventory.InventoryItemID = stockItem.InventoryItemID;
AddConsumedInventory.LabOrderID = stockItem.LabOrderID;
db.ConsumedInventories.Add(AddConsumedInventory);
db.SaveChanges();
}
db.Entry(lab).State = EntityState.Modified;
db.SaveChanges();
}
}
我需要在添加一個到五個項目基於用戶輸入的子表。
我越來越喜歡這個
附加型「ConsumedInventory」的實體失敗,因爲同類型的另一實體已經有相同的主鍵值。如果圖中的任何實體具有衝突的鍵值,則使用「附加」方法或將實體的狀態設置爲「未更改」或「已修改」時可能會發生這種情況。這可能是因爲一些實體是新的並且還沒有收到數據庫生成的關鍵值。在這種情況下,使用'Add'方法或'Added'實體狀態來跟蹤圖形,然後根據情況將非新實體的狀態設置爲'Unchanged'或'Modified'。
我在這丟失了什麼?