EF实体。附件不起作用

问题描述 投票:4回答:3

我有一个从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

关于可能丢失/错误的任何帮助?

c# .net entity-framework sql-server-ce
3个回答
11
投票

[将对象附加到上下文时,它们的默认状态为未更改,应通过设置DBContext.Entry(entity).State = EntityState.Modified;并仅在该调用DBContext.SaveChanges();之后强制进行更新


0
投票

Attach方法依靠主键将实体附加到对象上下文。在我看来,当从视图和模型绑定更改对象时,更新的对象中缺少主键值。


0
投票

根据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();
}
© www.soinside.com 2019 - 2024. All rights reserved.