2010-08-22 44 views
0

此代碼是否有任何問題?我的實體沒有得到更新。當調用SaveChanges時,附加實體不會使用新值進行更新

public ActionResult UpdateNota(string notas) 
{ 
    if (Request.IsAjaxRequest()) 
    { 
     RegistroEntities registroEntities = new RegistroEntities(); 
     Nota nota = JsonConvert.DeserializeObject<Nota>(notas); 
     registroEntities.AttachTo("Notas",nota); 
     registroEntities.ApplyCurrentValues("Notas", nota); 
     registroEntities.SaveChanges(SaveOptions.DetectChangesBeforeSave); 
     return Json(new {success=true}); 
    } 
    return View(); 
} 

回答

1

審查Entity Framework documentation entitled Working with Objects,特別是在Attaching and Detaching Objects部分。

在這種情況下,您打電話給AttachTo,它將實體置於Unchanged狀態。

然後你調用ApplyCurrentValues,它將實體中的所有值複製到它自己的值;將具有不同值的任何值標記爲已修改。 (請注意,由於每個值只是複製到其自身,所以它們具有不同的值,因此實體保持Unchanged狀態)。

最後,您致電SaveChanges。由於該實體處於Unchanged狀態,因此無需執行任何操作。

在這個答案開頭的MSDN文檔鏈接包含有關正確的方法來做到這一點的信息(注意:加入實體使用超過更新的實體不同的解決方案)。

相關問題