2011-04-26 64 views
0

將通過ApplyPropertyChanges改變EF模型,當我嘗試保存編輯後的實體框架實體ApplyPropertyChanges,並得到一個例外:異常在MVC

「的ObjectStateManager不 包含ObjectStateEntry與 參考 類型 'MvcApplication1.Models.Product'。「}的System.Exception {System.InvalidOperationException}

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(Product productToEdit) //all properties of Product are valid 
{ 
       try 
       { 
productsDBEntities.ApplyPropertyChanges("ProductSet", productToEdit); //exception here 
        entities.SaveChanges(); 
        return RedirectToAction("Index"); 
       } 
       catch 
       { 
        return View(); 
       } 
      } 
的目的

任何想法將非常感激!

謝謝!

回答

1

,如果你想使用ApplyPropertyChanges您必須首先從數據庫中加載Product

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(Product productToEdit) 
{ 
    try 
    { 
     entities.Products.Single(p => p.Id == productToEdit.Id); 
     entities.ApplyPropertyChanges("ProductSet", productToEdit); 
     entities.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    catch 
    { 
     return View(); 
    } 
} 

或者您可以使用另一種方法:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(Product productToEdit) 
{ 
    try 
    { 
     entities.AttachTo("ProductSet", productToEdit); 
     entities.ObjectStateManager.GetObjectStateEntry(productToEdit).SetModified(); 
     entities.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    catch 
    { 
     return View(); 
    } 
} 

順便說一句。你使用.NET 3.5嗎?在.NET 4.0中,ApplyPropertyChanges已過時。

+0

感謝您的及時解決方案。 第一個解決方案正在工作。但是第二個表明State只是一個Get訪問器。 – Pingpong 2011-04-26 22:37:17

+0

@Pingpong:我修改了我的答案。現在第二個例子也應該可以工作。 – 2011-04-27 08:40:04

+0

謝謝,我會測試它,將其標記爲答案! – Pingpong 2011-04-28 09:48:35