Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新DbSet<;T>;项目';来自控制器的s值-C#,MVC,代码优先_C#_Asp.net Mvc_Code First_Dbcontext - Fatal编程技术网

更新DbSet<;T>;项目';来自控制器的s值-C#,MVC,代码优先

更新DbSet<;T>;项目';来自控制器的s值-C#,MVC,代码优先,c#,asp.net-mvc,code-first,dbcontext,C#,Asp.net Mvc,Code First,Dbcontext,这里是我的问题:我有一个MVC3 C#应用程序,我需要从编辑控制器更新DbSet中的一个值,因此T项的值将替换为一个新值。我不想删除该项目并再次添加它。我不知道怎么做。DbSet似乎没有类似于索引的东西 这是我的编辑控制器: public class ItemController : Controller { private SESOContext db = new SESOContext(); private FindQrs fqr = new

这里是我的问题:我有一个MVC3 C#应用程序,我需要从编辑控制器更新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);
        }
    }
编辑:上述控制器用于在创建操作时创建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;
         }
    }
    public DbSet<Qr> Qrs { get; set; }
公共类FindQrs
{
私有SESOContext db=新SESOContext();
公共Qr FindQr(字符串Qr)
{
List qrList=db.Qrs.ToList();
Qr foundQr=qrList.Find(委托(Qr qrDel){return qrDel.Value==Qr;});
返回原始qr;
}
}
Qr是一个只包含ID和字符串值字段的类。 Qrs是上下文中提到的DbSet。看起来是这样的:

    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;
         }
    }
    public DbSet<Qr> Qrs { get; set; }
public DbSet Qrs{get;set;}

任何帮助都将不胜感激。

您可能正在另一个数据库上下文中更新该值。试试这个:

    [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;
     }
}
[HttpPost]
公共操作结果编辑(项目)
{
if(ModelState.IsValid)
{
db.Entry(item).State=EntityState.Modified;
Qr=fqr.FindQr(项目Qr,db);
//更新这里的某个地方
db.SaveChanges();
返回操作(“索引”);
}
ViewBag.SetID=新选择列表(db.Sets,“SetID”,“Name”,item.SetID);
返回视图(项目);
}
公共类FindQrs
{
public Qr FindQr(字符串Qr,SESOContext db)//在db上下文中传递
{
List qrList=db.Qrs.ToList();
Qr foundQr=qrList.Find(委托(Qr qrDel){return qrDel.Value==Qr;});
返回原始qr;
}
}

您可能正在不同的数据库上下文中更新该值。试试这个:

    [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;
     }
}
[HttpPost]
公共操作结果编辑(项目)
{
if(ModelState.IsValid)
{
db.Entry(item).State=EntityState.Modified;
Qr=fqr.FindQr(项目Qr,db);
//更新这里的某个地方
db.SaveChanges();
返回操作(“索引”);
}
ViewBag.SetID=新选择列表(db.Sets,“SetID”,“Name”,item.SetID);
返回视图(项目);
}
公共类FindQrs
{
public Qr FindQr(字符串Qr,SESOContext db)//在db上下文中传递
{
List qrList=db.Qrs.ToList();
Qr foundQr=qrList.Find(委托(Qr qrDel){return qrDel.Value==Qr;});
返回原始qr;
}
}

您想更新什么属性或实体?@dtryon-hm您是对的-我没有提到这一点。我想用视图中的新值更新DbSet中Qr项的值(在用户单击例如:在某个视图中保存后),我将编辑我的问题。好的,您应该可以通过设置要在从db上下文中选择的Qr上更新的属性来实现这一点。只要确保在更新和保存时处于相同的数据库上下文中,否则EF无法进行更改跟踪。请看下面我的答案。您想更新什么属性或实体?@dtryon-hm您是对的-我没有提到这一点。我想用视图中的新值更新DbSet中Qr项的值(在用户单击例如:在某个视图中保存后),我将编辑我的问题。好的,您应该可以通过设置要在从db上下文中选择的Qr上更新的属性来实现这一点。只要确保在更新和保存时处于相同的数据库上下文中,否则EF无法进行更改跟踪。请看下面我的答案。好答案。我不得不稍微修改我的代码以避免一些异常,但将DbContext传递给该方法就做到了!非常感谢。非常感谢。:)回答得好。我不得不稍微修改我的代码以避免一些异常,但将DbContext传递给该方法就做到了!非常感谢。非常感谢。:)