实体框架C# - ObjectStateManager

时间:2013-12-12 00:24:01

标签: c# asp.net-mvc

我发现很难找到解决这个问题的方法。我在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;

2 个答案:

答案 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);
    }