我正在尝试更新数据库现有行中的值,但我似乎无法让更改坚持下去。我的控制器中的代码目前看起来像这样:
[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;
}
}
答案 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的生命周期设置为实例。