如何在一个视图EntityFramework.dll错误中编辑两个模型

时间:2015-09-10 07:20:15

标签: asp.net-mvc

这是我的代码

模型

public class ViewModelRequestPurchaseItem
{
   public List<RequestPurchase> RequestPurchases  { get; set; }
   public List<RequestPurchaseItem> RequestPurchaseItems { get; set; }
}

查看

@using EFMySQLCardTest.Models
@model EFMySQLCardTest.Models.ViewModelRequestPurchaseItem

控制器

public ActionResult Edit([Bind(Include = "RequestPurchases,RequestPurchaseItems")] ViewModelRequestPurchaseItem viewModelRequestPurchaseItem, string id)
{      
    var requestPurchase = db.RequestPurchase.Where(x => x.RequestPurchaseNumber == id).ToList();     
    var requestPurchaseItem = db.RequestPurchaseItem.Where(x => x.RequestPurchaseNumber == id).OrderBy(x => x.RequestPurchaseItemID).ToList();    
    viewModelRequestPurchaseItem.RequestPurchases = requestPurchase;
    viewModelRequestPurchaseItem.RequestPurchaseItems = requestPurchaseItem;
    if (ModelState.IsValid)
    {
        db.Entry(viewModelRequestPurchaseItem).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    else
    {
        this.ExpendErrors();
    }
    return View(viewModelRequestPurchaseItem);
}

在这一行:

db.Entry(viewModelRequestPurchaseItem).State = EntityState.Modified

错误是:

  

viewModelRequestPurchaseItem不是部件模型

1 个答案:

答案 0 :(得分:1)

ViewModelRequestPurchaseItem是您的视图模型,不属于数据库上下文。您需要在集合中保存每个RequestPurchaseRequestPurchaseItems。您当前的代码还将集合分配给数据库中的当前值,从而消除了您在视图中所做的任何编辑。你的方法应该是

public ActionResult Edit(ViewModelRequestPurchaseItem model)
{
  if (ModelState.IsValid)
  {
    return View(model);
  }
  foreach (RequestPurchase item in model.RequestPurchases)
  {
    db.Entry(item).State = EntityState.Modified;
  }
  // ditto for RequestPurchaseItems
  db.SaveChanges();
  return RedirectToAction("Index");
}
相关问题