更新数据库中的单个值

时间:2018-04-18 09:08:58

标签: asp.net-mvc entity-framework crud

我正在尝试更新数据库现有行中的值,但我似乎无法让更改坚持下去。我的控制器中的代码目前看起来像这样:

[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;
            }
        }

1 个答案:

答案 0 :(得分:0)

试试这个:

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

<强>更新 你必须告诉&#34; EF用于跟踪编辑实体的变化,这就是

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

是必需的。 但是你也没有使用一个DbContext的2个不同实例。我非常推荐使用DI,并根据请求将DbContext的生命周期设置为实例。