2017-09-21 19 views
0

このコードでは、IsMaleフィールドがTable1およびNameフィールドがTable2に変更されます。変更は、Entity Frameworkの変更を保存した後にデータベースの特定のテーブルにコミットされません

Table1の変更が適用されますが、Table2の変更は適用されません。 context.SaveChanges()返信2しかしTable2はデータベース で更新されていません。

using (var context = new ctxdB()) 
{ 
    var tbl1 = context.Table1.FirstOrDefault(c => c.Token == token); 
    var tbl2 = context.Table2.Find(id); 

    tbl1.IsMale = true; 
    tbl2.Name = "New name"; 

    context.Entry(tbl1).State = EntityState.Modified; 
    context.Entry(tbl2).State = EntityState.Modified; 

    context.SaveChanges(); 
} 
+0

テーブル2での「検索」は何か見つかっていますか? –

+0

@ Locke125、もちろんそうです。 – msitworld

+0

btw、FirstOrDefault()で取得するエンティティで、エンティティの状態を手動で設定する必要はありません。 –

答えて

0

あなたがここにエントリを見れば:

https://msdn.microsoft.com/en-us/library/gg696418(v=vs.113).aspx

それは

を言う「とは、所与の主キー値を持つエンティティを検索与え主で実体場合。キー値がコンテキストに存在する場合は、ストアに要求を出さずにすぐに戻されます。そうでない場合は、指定された主キー値とこのエンティティを持つエンティティのストアへの要求が行われますコンテキストにアタッチされ、返されます。

これは、接続されていないエンティティを返す可能性があることを示しています。そのエンティティのAttach()メソッドをContext.Table2から外してみるとよいでしょう。

context.Table2.Attach(tbl2); 

あなたが同様に設定されているエンティティにFirstOrDefault()を使用していない理由はありますか?それはクエリを生成し、エンティティセットにモデルを添付する必要があります。

+0

私はこの行を使用しましたが、まだ動作していません – msitworld

+0

他の人の助言を取り、SaveChanges()から戻り番号を出力するか、var tbl2 = context.Table2.FirstOrDefault(t => t.Id == id ); –

+0

context.SaveChanges()は2を返しますが、 'Table2'はデータベースで更新されません。 – msitworld

関連する問題