在EF-MVC中更新第二个表或模型

时间:2014-05-07 21:24:30

标签: c# entity-framework asp.net-mvc-4

我需要更新我的EF中的第二个表,这个表是我的购买存储,我称这个实体并搜索值的变化(数量),我做数学比较并发回更新的数据,但是错误告诉我“ObjectStateManager中已经存在具有相同键的对象.ObjectStateManager无法跟踪具有相同键的多个对象”

如何解决错误?谢谢

我的控制器

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(PurchaseDetails purchasedetails)
    {

        ViewBag.PurchaseID = new SelectList(db.Purchases, "PurchaseID", "Notes", purchasedetails.PurchaseID);
        ViewBag.idArt = new SelectList(db.Art, "idArt", "des_art", purchasedetails.IdArt);
        ViewBag.idAlmacen = new SelectList(db.Almacens, "idAlmacen", "des_alma", purchasedetails.IdAlmacen);

        var cant_details = db.PurchaseDetails.Where(p => p.PurchaseDetailsID == purchasedetails.PurchaseDetailsID).FirstOrDefault();

        var cantidad = purchasedetails.Qty - cant_details.Qty;

        if (ModelState.IsValid)
        {                
            db.Entry(purchasedetails).State = EntityState.Modified;
            db.SaveChanges();

            var stock_id = db.Stock.Where(s => s.idAlmacen == purchasedetails.IdAlmacen && s.idArt == purchasedetails.IdArt).FirstOrDefault();
            stock_id.stcActual = stock_id.stcActual + cantidad;

            db.Stock.Attach(stock_id);
            var entry = db.Entry(stock_id);
            entry.Property(e => e.stcActual).IsModified = true;
            db.SaveChanges();

            return RedirectToAction("Index");
        }

        return View(purchasedetails);
    }

1 个答案:

答案 0 :(得分:0)

我在这篇文章中找到了解决方案

How do I detach objects in Entity Framework Code First?

我在行代码中使用了AsNoTracking()

var cant_details = db.PurchaseDetails.Where(p => p.PurchaseDetailsID == purchasedetails.PurchaseDetailsID).FirstOrDefault();

并且完美地工作

 var cant_details = db.PurchaseDetails.AsNoTracking().Where(p => p.PurchaseDetailsID == purchasedetails.PurchaseDetailsID).FirstOrDefault();