Lambda 如何在ASP.NETMVC5中保存父表时添加子表?
我正在使用ASP.NET MVC 5应用程序,我需要帮助在编辑父表时添加子表。i、 我需要在一个控制器方法中插入一个子表并更新一个父表 我的用例是在创建和编辑LabOrder(父表)时,将一组新的consumedInventories(子表)添加到表中。在create方法中,它工作正常,即添加了一组新的consumedInventories,但在edit方法中,它会导致错误 我的模型: //父表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
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();
}
}