4

次のように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();

}

ただし、データベースは更新されません

環境は.net4.0、dbはsqlCompact4です。

何が欠けている/間違っている可能性があるかについての助けはありますか?

4

3 に答える 3

11

オブジェクトをコンテキストにアタッチする場合、デフォルトの状態はUnchangedです。設定して更新を強制する必要があります。DBContext.Entry(entity).State = EntityState.Modified;また、その呼び出しの後にのみDBContext.SaveChanges();

于 2012-04-30T08:49:20.100 に答える
0

Attachメソッドは、エンティティをオブジェクトコンテキストにアタッチするために主キーに依存しています。私には、オブジェクトがビューとモデルバウンドから変更されたときに、更新されたオブジェクトに主キー値がないように見えます。

于 2012-04-30T05:34:59.230 に答える
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(); 

} 

編集EF6の時点では、上記の解決策は機能しません。代わりに、以下を使用してください。

using ( var ctx = new Mycontext() )
{
    ctx.MyGroups.Attach(o); // verified object o is updated 
    ctx.Entry(entity).State = EntityState.Modified;
    ctx.SaveChanges();
}
于 2012-04-30T08:58:58.357 に答える