Как проверить существующее поле записи и сравнить с данными публикации перед изменением?

1

Я очень новичок в MVC и надеюсь, что кто-то может мне помочь.

У меня есть метод контроллера для сохранения данных обратной почты из формы. Он имеет поле OrderStatus. Если значение статуса заказа "Получено", то только я хочу выполнить блок кода.

То, что я делаю в этом коде, - это прочитать значения сообщений и снова прочитать данные EF, используя "Найти" и сравнить значения. Все выглядит нормально, но когда я пытаюсь сохранить запись, это дает мне ошибку ниже.

An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.

Я понимаю проблему, но как я могу проверить существующие значения в базе данных, сравнить и сохранить.

Мой код ниже

    // POST: /Purchasing/Edit/5

    [HttpPost]
    public ActionResult Edit(PurchaseMaster purchasemaster)
    {
        if (ModelState.IsValid)
        {
            if (purchasemaster.OrderStatus == "Received")
            {
                string myId = purchasemaster.PurchaseId;
                //check if the existing status is already set as Received or not
                PurchaseMaster pm = db.PurchaseMasters.Find(myId);

                if (pm.OrderStatus != "Received") //this will prevent duplicate stock updates
                {
                    //load the items and loop through to update the stock
                    List<PurchaseDetail> purchasedetails = db.PurchaseDetails.Where(x => x.PurchaseId == myId).ToList();
                    foreach (PurchaseDetail singleitem in purchasedetails)
                    {
                        string itemcode = singleitem.ItemCode;
                        Item item = db.Items.Find(itemcode);
                        item.QtyInHand = item.QtyInHand + singleitem.Quantity;
                        db.Entry(item).State = EntityState.Modified;
                        db.SaveChanges();

                    }
                }
            }

            db.Entry(purchasemaster).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(purchasemaster);
    }
Теги:
entity-framework
asp.net-mvc-4

1 ответ

1
Лучший ответ

Попробуйте это, он должен работать

//don't get this object from database 
//PurchaseMaster pm = db.PurchaseMasters.Find(myId); 

if (db.PurchaseMasters.Any(x  =>x.Id == myId && x.OrderStatus != "Received") {
   // Do your stuff
}
  • 0
    Спасибо ! это подходит для меня.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню