Lambda 如何在ASP.NETMVC5中保存父表时添加子表?

Lambda 如何在ASP.NETMVC5中保存父表时添加子表?,lambda,asp.net-mvc-5,entity-framework-6,Lambda,Asp.net Mvc 5,Entity Framework 6,我正在使用ASP.NET MVC 5应用程序,我需要帮助在编辑父表时添加子表。i、 我需要在一个控制器方法中插入一个子表并更新一个父表 我的用例是在创建和编辑LabOrder(父表)时,将一组新的consumedInventories(子表)添加到表中。在create方法中,它工作正常,即添加了一组新的consumedInventories,但在edit方法中,它会导致错误 我的模型: //父表 public class LabOrder { [Key] public int L

我正在使用ASP.NET MVC 5应用程序,我需要帮助在编辑父表时添加子表。i、 我需要在一个控制器方法中插入一个子表并更新一个父表

我的用例是在创建和编辑LabOrder(父表)时,将一组新的consumedInventories(子表)添加到表中。在create方法中,它工作正常,即添加了一组新的consumedInventories,但在edit方法中,它会导致错误

我的模型: //父表

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();
    }
}
public ActionResult EditLabOrder(LabOrder lab){
if (ModelState.IsValid)
{
    db.ConsumedInventories.AddRange(lab.ConsumedInventories);
    db.Entry(lab).State = EntityState.Modified;
    db.SaveChanges();
}
}
我需要根据用户输入在子表中添加一到五项

我越来越像这样了

附加“ConsumedInventory”类型的实体失败,因为相同类型的另一个实体已具有相同的主键值。如果图形中的任何实体具有冲突的键值,则在使用“Attach”方法或将实体状态设置为“Unchanged”或“Modified”时可能会发生这种情况。这可能是因为某些实体是新的,尚未收到数据库生成的键值。在这种情况下,使用“添加”方法或“添加”实体状态跟踪图形,然后根据需要将非新实体的状态设置为“未更改”或“已修改”


我缺少什么?

我找到了解决方案

而不是使用foreach逐个添加记录。。只需使用EntityFramework6的名为AddRange的功能即可立即添加记录

这个对我来说很好

我已更新控制器代码:

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();
    }
}
public ActionResult EditLabOrder(LabOrder lab){
if (ModelState.IsValid)
{
    db.ConsumedInventories.AddRange(lab.ConsumedInventories);
    db.Entry(lab).State = EntityState.Modified;
    db.SaveChanges();
}
}