0

I need to update a second table in my EF, this table is my storage of purchase, i call this entity and search the value for change (Qty), i do the math comparasion and send back the data updated, but raise a error tell me "An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key"

How fix the error? Thanks

My Controller

    [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 Answers1

0

I found The solution in this post

How do I detach objects in Entity Framework Code First?

i used AsNoTracking() in my line code

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

and work perfectly

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