正在更新数据库集<;T>;项目';s值-C#,MVC,Code First

本文关键字:First -C# Code MVC gt 数据库 更新 lt 项目 | 更新日期: 2023-09-27 18:28:18

我的问题是:我有一个MVC3 C#应用程序,我需要从Edit控制器更新DbSet中的一个值,所以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);
        }
    }

编辑:上面的控制器用于Item实体,该实体在创建操作时创建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和字符串Value字段的类。Qrs是上下文中提到的DbSet。它看起来像这样:

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

任何帮助都将不胜感激。

正在更新数据库集<;T>;项目';s值-C#,MVC,Code First

您可能正在更新不同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;
     }
}