更新数据库中的单个值
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 生命周期设置为每个请求的实例。
我正在尝试更新数据库现有行中的值,但似乎无法使更改生效。我控制器中的代码目前如下所示:
[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 生命周期设置为每个请求的实例。