2011-12-28 13 views
0

Viewからモデルを変更して、そのモデルを使用してデータベースを更新しようとしています。私のコードは、以下に見られることができます。ASP.NET MVC 3 Update、ObjectStateManager、Concurrency

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

私のコードは、このエラーを与える:

The object cannot be attached because it is already in the object context. An object can only be reattached when it is in an unchanged state.

、私はこのコードをしようとした場合:

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

を私は下のエラーを取得しています

Violation of PRIMARY KEY constraint 'PK_ProductCategory_1'. Cannot insert duplicate key in object 'dbo.ProductCategory'.

私は何をすればいいのか分からないそれをolive。どんな助けもありがとう。ありがとうございました

答えて

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(); 

}