Asp.net-Mvc

context.SaveChanges 不起作用

  • September 29, 2020

我的更新方法在 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 對象附加到數據庫。

引用自:https://stackoverflow.com/questions/8056761