我正在尝试通过我的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;
}
这就是我正在做的事情,如果我理解了我所期待的:
接收具有各种属性值的对象。这需要更新现有的数据库条目,目前使用112进行硬编码(仅用于测试)
查看ID 112的计划是否存在(确实如此)。我们将此命名为existingPlan
。我期待EF跟踪对此
由于该计划存在,请致电UpdatePlan
,提供newPlan
和existingPlan
'映射'从newPlan
到existingPlan
的相关新值
由于EF应该跟踪现有的计划(现已更新),只需保存
我在这里缺少什么?
答案 0 :(得分:1)
我注意到Plan
实例的检索是通过_planQuery
对象进行的,而更新是通过_planCommand
对象进行的。
可能这些不共享相同的DbContext
实例;如果是这种情况,Plan
实例在进行更新的DbContext
内没有进行更改,因此不会执行更新语句。
要解决此问题,请确保通过相同的DbContext
实例进行检索和更新。