Dot*_*row 10 asp.net-mvc entity-framework entity-framework-4.1 asp.net-mvc-3
我的更新方法不适用于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();
}
Sla*_*uma 16
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();
}
这里的问题是您没有考虑到 Web 页面是无状态的这一事实。您可能使用从数据库返回的帐户数据填充页面,但是该对象在请求结束时被销毁。
在回发时,模型绑定器创建了一个新的 Acccount 对象,但是这个对象没有连接到数据库,因此您的数据库上下文甚至不知道它是否存在。因此,当您调用 SaveChanges 时,就它而言,没有任何变化。
您必须从数据库中获取一个新的 Account 对象并使用模型绑定器创建的 Account 中的数据更新它的字段,或者将新的 account 对象附加到数据库。
| 归档时间: | 
 | 
| 查看次数: | 24782 次 | 
| 最近记录: |