无法更新实体框架

时间:2018-06-17 10:46:05

标签: c# asp.net-mvc-5 entity-framework-6

我正在尝试通过我的ASP.NET MVC 5应用程序中的EF 6更新我的表。

我没有收到错误消息或异常,但没有任何内容保存到数据库中。我怀疑对象不是IQueryable因此没有被EF跟踪(如果我的理解是正确的)。

public async Task Work(Plan newPlan)
{
    var existingPlan = await this._planQuery.GetPlan(112);

    if (existingPlan != null)
    {
        await this._planCommand.UpdatePlan(newPlan, existingPlan))
    }
}

这两个相关的方法是

internal async Task<Plan> GetPlan(int id)
{
    return await base.DataContext.Plans.SingleAsync(a => a.Id == id);
}

internal async Task<bool> UpdatePlan(Plan newPlan, Plan existingPlan)
{
    existingPlan.LastEditDate = DateTime.Now;
    existingPlan.PlanName = newPlan.PlanName;
    existingPlan.Website = newlan.Website;

    if (!await base.SaveToDatabase())
        return false;

     return true;
}

这就是我正在做的事情,如果我理解了我所期待的:

  1. 接收具有各种属性值的对象。这需要更新现有的数据库条目,目前使用112进行硬编码(仅用于测试)

  2. 查看ID 112的计划是否存在(确实如此)。我们将此命名为existingPlan。我期待EF跟踪对此

  3. 的任何更新
  4. 由于该计划存在,请致电UpdatePlan,提供newPlanexistingPlan

  5. '映射'从newPlanexistingPlan的相关新值

  6. 由于EF应该跟踪现有的计划(现已更新),只需保存

  7. 我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

我注意到Plan实例的检索是通过_planQuery对象进行的,而更新是通过_planCommand对象进行的。
可能这些不共享相同的DbContext实例;如果是这种情况,Plan实例在进行更新的DbContext内没有进行更改,因此不会执行更新语句。

要解决此问题,请确保通过相同的DbContext实例进行检索和更新。