Asp.net mvc 更新数据库中的单个值

Asp.net mvc 更新数据库中的单个值,asp.net-mvc,entity-framework,crud,Asp.net Mvc,Entity Framework,Crud,我试图更新数据库现有行中的一个值,但似乎无法使更改保持不变。我的控制器中的代码当前如下所示: [HttpPost] public ActionResult AddCredit(int employeeNumber, decimal amount) { var employee = new GetEmployeeForEmployeeNumber<Employee>(employeeNumber).Query().FirstOrD

我试图更新数据库现有行中的一个值,但似乎无法使更改保持不变。我的控制器中的代码当前如下所示:

[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 });
        }
[HttpPost]
公共行动结果AddCredit(国际雇员编号,十进制金额)
{
var employee=new GetEmployeeForEmployeeNumber(employeeNumber).Query().FirstOrDefault();
var employeeAccount=new GetEmployeeAccountForId(employee.Id).Query().FirstOrDefault();
employeeAccount.Credit=employeeAccount.Credit+金额;
db.SaveChanges();
返回重定向操作(“主页”,新{employeeNumber});
}
根据我对这个主题所做的研究,这应该是可行的,因为我根据工作示例对它进行了建模。信用确实增加了给定的金额,但在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;
            }
        }
公共类GetEmployeeAccountForId
{
私有TestContext db=newTestContext();
私有只读int_id;
公共GetEmployeeAccountForId(int id)
{
_id=id;
}
公共IQueryable查询()
{
从db.EmployeeAccounts中的EmployeeAccount返回
其中employeeAcount.Id==\u Id
选择EmployeeAccount;
}
}
试试这个:

employeeAccount.Credit = employeeAccount.Credit + amount;
db.Entry(employeeAccount).State = EntityState.Modified;
db.SaveChanges();
更新 您必须“告诉”EF跟踪editet实体的更改,这就是为什么

db.Entry(employeeAccount).State = EntityState.Modified
是必需的。
但是您也不应该使用一个DbContext的两个不同实例。我强烈建议使用DI,并将DbContext生存时间设置为每个请求的实例。

GetEmployeeAccountForId()
Query()
后面的方法内容是什么?包括它们以帮助我们找出为什么数据库更新没有执行。我更新了问题,以包括您使用的实体框架的哪个版本?我认为问题源于使用的不同上下文引用,因为
GetEmployeeAccountForId
使用内部上下文查询数据库,您正在控制器级别调用
db.SaveChanges
。要在不同的上下文上执行更新,您需要在调用
SaveChanges()
之前将其附加或设置为修改状态。我尝试了db.update,但它不存在。这是扩展的一部分吗?我已经更新了答案。更新在EF核心中。使用旧版本:db.Entry(employeeAccount).State=EntityState.Modified;它应该可以工作,但不应该使用DbContext的两个实例。我强烈建议使用DI并将DbContext范围设置为每个请求的实例