这个问题已经被多次询问了,但我仍然不明白为什么我会一直收到这个错误。
在我的控制器中,我有这种方法:
//
// POST : /ObjectProducer/Edit/5
[HttpPost]
public ActionResult Edit(OBJECT_PRODUCER _objProd)
{
if (ModelState.IsValid)
{
m_Db.Entry(_objProd).State = EntityState.Modified;
m_Db.SaveChanges();
return RedirectToAction("SearchIndex");
}
return View(_objProd);
}
但是当我点击m_Db.Entry(_objProd).State = EntityState.Modified;
行时,会发生错误。任何人都可以向我解释什么是错的吗?
**编辑**
这是启动“编辑”方法的控制器方法(“GET”方法)
//
// GET : /PriceProvider/Edit
public ActionResult Edit(int id = 0)
{
OBJECT_PRODUCER objProd = m_ProductManager.GetObjProdByID(id);
if (objProd == null)
{
ViewData["ErrorMessage"] = m_NoDataFound;
}
return View(objProd);
}
答案 0 :(得分:3)
我认为你需要遵循几个步骤来解决你的问题:
我正在使用Entity Framework 5,这是我用来根据用户提交的更新实体更新原始实体的代码:
public virtual void Update(TEntity entityToUpdate, TEntity originalEntity)
{
ctx.Entry(originalEntity).CurrentValues.SetValues(entityToUpdate);
}
所以我认为在你的情况下:
public ActionResult Edit(OBJECT_PRODUCER _objProd)
{
if (ModelState.IsValid)
{
//this line might not be quite right, but basically
//get the entity from dbContext based on the id of the submitted object
OBJECT_PRODUCER originalFromDbContext = m_Db.GetById(_objProd.Id);
//set the values for the Entity retrieved from m_Db to the new values
//submitted by the user
m_Db.Entry(originalFromDbContext).CurrentValues.SetValues(_objProd);
m_Db.SaveChanges(); //save changes
return RedirectToAction("SearchIndex");
}
return View(_objProd);
}
答案 1 :(得分:1)
尝试从m_Db重新获取_objProd实体。你在帖子中得到的那个实际上并不是你当前的datacontext的一部分,它来自于获取版本的Edit中使用的datacontext。
var _newObjProd = m_Db.GetObjProdByID(_objProd.ID);
基本上,实体在两个DataContexts中的效果不佳。您需要在新的datacontext中再次加载实体。