2016-10-03 70 views
3

我正在使用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'。

我在這丟失了什麼?

回答

1

我找到了解決辦法..

而不是使用的foreach通過一個加一記..只是使用的EntityFramework 6的功能,稱爲的AddRange添加紀錄一旦...

這一個工作得很好,我

我已經更新了我的控制器代碼:

public ActionResult EditLabOrder(LabOrder lab){ 
if (ModelState.IsValid) 
{ 
    db.ConsumedInventories.AddRange(lab.ConsumedInventories); 
    db.Entry(lab).State = EntityState.Modified; 
    db.SaveChanges(); 
} 
} 
相關問題