context.SaveChanges不起作用

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

并且SaveAccount看起来是这样的:

internal void SaveAccount(Account account) {         
    context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

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();
}
Run Code Online (Sandbox Code Playgroud)

替代方案:

internal void SaveAccount(Account account) {

    context.Entry(account).State = EntityState.Modified;
    context.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)


Eri*_*sch 5

这里的问题是您没有考虑到 Web 页面是无状态的这一事实。您可能使用从数据库返回的帐户数据填充页面,但是该对象在请求结束时被销毁。

在回发时,模型绑定器创建了一个新的 Acccount 对象,但是这个对象没有连接到数据库,因此您的数据库上下文甚至不知道它是否存在。因此,当您调用 SaveChanges 时,就它而言,没有任何变化。

您必须从数据库中获取一个新的 Account 对象并使用模型绑定器创建的 Account 中的数据更新它的字段,或者将新的 account 对象附加到数据库。