更新数据库中的单个值

Updating a single value in a database

我正在尝试更新数据库现有行中的值,但似乎无法使更改生效。我控制器中的代码目前如下所示:

[HttpPost]
        public ActionResult AddCredit(int employeeNumber, decimal amount)
        {
            var employee = new GetEmployeeForEmployeeNumber<Employee>(employeeNumber).Query().FirstOrDefault();

            var employeeAccount = new GetEmployeeAccountForId<EmployeeAccount>(employee.Id).Query().FirstOrDefault();

            employeeAccount.Credit = employeeAccount.Credit + amount;

            db.SaveChanges();

            return RedirectToAction("Home", new { employeeNumber });
        }

根据我对该主题所做的研究,这应该可行,因为我已经根据工作示例对其进行了建模。 Credit 确实增加了给定的数量,但在 db.SaveChanges 之后,数据库中的值仍然保持原样。 我是否漏掉了一些明显的东西?

编辑:

GetEmployeeAccountForId 如下所示:

public class GetEmployeeAccountForId<T>
        {
            private TestContext db = new TestContext();

            private readonly int _id;

            public GetEmployeeAccountForId(int id)
            {
                _id = id;
            }

            public IQueryable<EmployeeAccount> Query()
            {
                return from employeeAcount in db.EmployeeAccounts
                       where employeeAcount.Id == _id
                       select employeeAcount;
            }
        }

试试这个:

employeeAccount.Credit = employeeAccount.Credit + amount;
db.Entry(employeeAccount).State = EntityState.Modified;
db.SaveChanges();

更新 您必须 "tell" EF 来跟踪编辑实体的更改,这就是

的原因
db.Entry(employeeAccount).State = EntityState.Modified

为必填项。 但是您也不应该使用一个 DbContext 的 2 个不同实例。我强烈推荐使用 DI,并将 DbContext 生命周期设置为每个请求的实例。