Обновление значения элемента DbSet <T>с контроллера - C #, MVC, Code First - PullRequest
1 голос
/ 20 марта 2012

вот мой вопрос: у меня есть приложение MVC3 C #, и мне нужно обновить значение в DbSet из контроллера Edit, чтобы значение элемента T было заменено новым. Я не хочу удалять элемент и добавлять его снова. Я не могу понять, как это сделать. DbSet, похоже, не имеет что-то вроде индекса.

Вот мой контроллер редактирования:

    public class ItemController : Controller
    {
        private SESOContext db = new SESOContext();
        private FindQrs fqr = new FindQrs();

        [HttpPost]
        public ActionResult Edit(Item item)
        {
            if (ModelState.IsValid)
            {
                db.Entry(item).State = EntityState.Modified;
                Qr qr = fqr.FindQr(item.QR);
                // update somewhere here
                db.SaveChanges();

                return RedirectToAction("Index");
            }
            ViewBag.SetID = new SelectList(db.Sets, "SetID", "Name", item.SetID);
            return View(item);
        }
    }

EDIT: вышеуказанный контроллер предназначен для сущности Item, которая при действии Create создает экземпляры сущности Qr. Я просто хочу добавить что-то, что при действии «Правка» обновит поле «Значение» сущности Qr значением из представления (поле «Значение» в Qr должно быть уникальным).

Где метод FindQrs выглядит следующим образом:

    public class FindQrs
    {
         private SESOContext db = new SESOContext();

         public Qr FindQr(string qr)
         {
              List<Qr> qrList = db.Qrs.ToList<Qr>();
              Qr foundQr = qrList.Find(delegate(Qr qrDel) { return qrDel.Value == qr; });
              return foundQr;
         }
    }

И Qr - это класс, который содержит только поля ID и строковое значение. Qrs - упомянутый DbSet из контекста. Это выглядит так:

    public DbSet<Qr> Qrs { get; set; }

Любая помощь будет оценена.

1 Ответ

1 голос
/ 20 марта 2012

Возможно, вы обновляете значение в другом DbContext.Попробуйте это:

    [HttpPost]
    public ActionResult Edit(Item item)
    {
        if (ModelState.IsValid)
        {
            db.Entry(item).State = EntityState.Modified;
            Qr qr = fqr.FindQr(item.QR, db);
            // update somewhere here
            db.SaveChanges();

            return RedirectToAction("Index");
        }
        ViewBag.SetID = new SelectList(db.Sets, "SetID", "Name", item.SetID);
        return View(item);
    }


public class FindQrs
{
     public Qr FindQr(string qr, SESOContext db)  // pass in the db context
     {
          List<Qr> qrList = db.Qrs.ToList<Qr>();
          Qr foundQr = qrList.Find(delegate(Qr qrDel) { return qrDel.Value == qr; });
          return foundQr;
     }
}
...