C# EF entity.attach不起作用
我从db中检索到一个实体,如下所示C# EF entity.attach不起作用,c#,.net,entity-framework,sql-server-ce,C#,.net,Entity Framework,Sql Server Ce,我从db中检索到一个实体,如下所示 using ( var ctx = new Mycontext() ) return ctx.MyGroups.First( // query ); using ( var ctx = new Mycontext() ) { ctx.MyGroups.Attach(o); // verified object o is updated ctx.SaveChanges(); } 这将绑定到UI,并在用户保存操作时更新,如下所示 us
using ( var ctx = new Mycontext() )
return ctx.MyGroups.First( // query );
using ( var ctx = new Mycontext() )
{
ctx.MyGroups.Attach(o); // verified object o is updated
ctx.SaveChanges();
}
这将绑定到UI,并在用户保存操作时更新,如下所示
using ( var ctx = new Mycontext() )
return ctx.MyGroups.First( // query );
using ( var ctx = new Mycontext() )
{
ctx.MyGroups.Attach(o); // verified object o is updated
ctx.SaveChanges();
}
但是,数据库没有更新
环境是.NET4.0,数据库是SQLCompact4
关于哪些内容可能丢失/错误的任何帮助?
Attach
方法依赖主键将实体附加到对象上下文。在我看来,当对象从视图和模型绑定中更改时,更新的对象中缺少主键值。将对象附加到上下文时,其默认状态不变,应通过设置DBContext.Entry(entity).state=EntityState.Modified强制更新代码>并且仅在该调用之后DBContext.SaveChanges()代码>根据建议,以下是您的解决方案:
using ( var ctx = new Mycontext() )
{
ctx.MyGroups.Attach(o); // verified object o is updated
ctx.ObjectStateManager.ChangeObjectState(o, EntityState.Modified);
ctx.SaveChanges();
}
从EF 6开始编辑,上述解决方案不起作用。
相反,请使用以下命令:
使用(var ctx=new Mycontext())
{
ctx.MyGroups.Attach(o);//已验证对象o已更新
ctx.Entry(entity).State=EntityState.Modified;
ctx.SaveChanges();
}
主键从未更改,也就是说,我只更改了1个详细级别字段,并尝试保存它,但未保存!这是使用Sql compact,所以想知道是否有调试的方法!!应该更改主键的不是用户。在编辑场景中,我们有时会忘记为主键字段放置隐藏字段,这会导致在模型绑定中为主键字段指定默认值。您是否已在Post上检查您的主键属性是否包含正确的值?是的,添加works并添加多个记录对于EF 6不再使用wokring,请改用:ctx.Entry(entity).State=EntityState.Modified;