Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF entity.attach不起作用_C#_.net_Entity Framework_Sql Server Ce - Fatal编程技术网

C# EF entity.attach不起作用

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

我从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,并在用户保存操作时更新,如下所示

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;