ASP.NET MVC 3 Update,ObjectStateManager,Concurrency

时间:2011-12-28 09:22:04

标签: asp.net-mvc-3 entity-framework

我正在尝试修改来自View的模型,然后使用该模型更新我的数据库。我的代码如下所示:

public ActionResult Edit(Saving saving)
    {
        if (ModelState.IsValid)
        {
            Int32[] ids = saving.CatIds.Split(',').Select(n => Convert.ToInt32(n)).ToArray();
            foreach (var category in db.Category.Where(m => ids.Contains(m.id)).ToList())
                saving.Category.Add(category);
            db.ObjectStateManager.ChangeObjectState(saving, EntityState.Modified);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(saving);
    }

我的代码给出了这个错误:

  

无法附加对象,因为它已在对象上下文中。只有当对象处于未更改状态时才能重新附加对象。

如果我尝试这段代码:

public ActionResult Edit(Saving saving)
    {
        if (ModelState.IsValid)
        {
            Int32[] ids = saving.CatIds.Split(',').Select(n => Convert.ToInt32(n)).ToArray();
            foreach (var category in db.Category.Where(m => ids.Contains(m.id)).ToList())
                saving.Category.Add(category);
            db.ObjectStateManager.ChangeObjectState(saving, EntityState.Unchanged); 
            db.Saving.Attach(saving);
            db.ObjectStateManager.ChangeObjectState(saving, EntityState.Modified);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(saving);
    }

我收到以下错误:

  

违反PRIMARY KEY约束'PK_ProductCategory_1'。无法在对象'dbo.ProductCategory'中插入重复键。

我不知道该怎么做以及如何解决它。任何帮助将不胜感激。谢谢

1 个答案:

答案 0 :(得分:0)

您是否尝试过将其附加,然后修改属性?

if (ModelState.IsValid)
{
    db.Saving.Attach(saving);

    Int32[] ids = saving.CatIds.Split(',').Select(n => Convert.ToInt32(n)).ToArray();
    foreach (var category in db.Category.Where(m => ids.Contains(m.id)).ToList())
        saving.Category.Add(category);
    db.SaveChanges();

}