我有一个从db检索到的实体,如下所示
using ( var ctx = new Mycontext() )
return ctx.MyGroups.First( // query );
这已绑定到UI并在用户保存操作上进行了更新,如下所示
using ( var ctx = new Mycontext() )
{
ctx.MyGroups.Attach(o); // verified object o is updated
ctx.SaveChanges();
}
但是数据库未更新
环境是.net 4.0,数据库是sql compact 4
关于可能丢失/错误的任何帮助?
[将对象附加到上下文时,它们的默认状态为未更改,应通过设置DBContext.Entry(entity).State = EntityState.Modified;
并仅在该调用DBContext.SaveChanges();
之后强制进行更新
Attach
方法依靠主键将实体附加到对象上下文。在我看来,当从视图和模型绑定更改对象时,更新的对象中缺少主键值。
根据Ciobanu Ion的建议,这是您的解决方案:
using ( var ctx = new Mycontext() )
{
ctx.MyGroups.Attach(o); // verified object o is updated
ctx.ObjectStateManager.ChangeObjectState(o, EntityState.Modified);
ctx.SaveChanges();
}
EDIT从EF 6开始,上述解决方案无效。而是使用以下命令:
using ( var ctx = new Mycontext() )
{
ctx.MyGroups.Attach(o); // verified object o is updated
ctx.Entry(entity).State = EntityState.Modified;
ctx.SaveChanges();
}