Asp.net-Mvc
context.SaveChanges 不起作用
我的更新方法在 ASP.NET MVC 3 應用程序中不起作用。我使用了以下 EF 4.1 程式碼:
[HttpPost] public ActionResult UpdateAccountDetails(Account account) { if (ModelState.IsValid) { service.SaveAccount(account); } }
SaveAccount看起來像這樣:internal void SaveAccount(Account account) { context.SaveChanges(); }
internal void SaveAccount(Account account) { // Load current account from DB var accountInDb = context.Accounts.Single(a => a.Id == account.Id); // Update the properties context.Entry(accountInDb).CurrentValues.SetValues(account); // Save the changes context.SaveChanges(); }選擇:
internal void SaveAccount(Account account) { context.Entry(account).State = EntityState.Modified; context.SaveChanges(); }
這裡的問題是您沒有考慮到網頁是無狀態的這一事實。您可能使用從數據庫返回的帳戶數據填充您的頁面,但隨後該對像在請求結束時被銷毀。
在回發時,模型綁定器會創建一個新的帳戶對象,但是這個對象並沒有連接到數據庫,因此您的數據庫上下文甚至不知道它是否存在。因此,當您呼叫 SaveChanges 時,就它而言,沒有任何改變。
您必須從數據庫中獲取一個新的 Account 對象並使用模型綁定器創建的 Account 中的數據更新它的欄位,或者將新的 account 對象附加到數據庫。