我发现很难找到解决这个问题的方法。我在MVC应用程序中创建了一个Edit.cshtml视图。目前在我的控制器中我有以下代码
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Vendor vendor)
{
if (ModelState.IsValid)
{
db.Vendors.Attach(vendor);
db.ObjectStateManager.ChangeObjectState(vendor, EntityState.Modified);
db.Entry(vendor).CurrentValues.SetValues(vendor);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(vendor);
}
但在我构建“dbo.ObjectStateManager”之前,我给出了一个错误。如下!
错误25'DeviceorScorecard.Models.VendorScorecardEntities1'不包含'ObjectStateManager'的定义,并且没有可以找到接受类型为'VendorScorecard.Models.VendorScorecardEntities1'的第一个参数的扩展方法'ObjectStateManager'(您是否错过了使用指令或程序集引用?)C:\ solutions \ Web \ VisualStudio2010 \ VendorScorecard \ VendorScorecard-Good \ VendorScorecard \ Controllers \ VendorController.cs 90 20 VendorScorecard
我也试过了这行代码!它删除了错误,但实际上并不允许输入到我的数据库
// db.Entry(vendor).State = EntityState.Modified;
答案 0 :(得分:2)
来自:Why does the ObjectStateManager property not exist in my db context?
var manager = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectStateManager;
答案 1 :(得分:0)
尝试此代码,它将解决您的问题
db.Entry(employeeFromDB).State = EntityState.Modified;
所以基本上你必须摆脱一行并改为使用此代码,请参阅下面的
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Vendor vendor)
{
if (ModelState.IsValid)
{
db.Vendors.Attach(vendor);
db.Entry(vendor).State = EntityState.Modified;
db.Entry(vendor).CurrentValues.SetValues(vendor);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(vendor);
}