2017-09-10 5 views
1

私は私ParticipantList(イベントIDとUSERID)に行を追加イベントID私のモデル内の1つのフィールドを更新中のトラブル

を受け入れる私のWeb APIアクションAddParticipantを持っているを持つ

私はインクリメントしたかったです私のEventsモデルの単一フィールドはParticipantListです。しかし、私はタイプ'xx.Models.Event'のエンティティをアタッチ」

エラーを取得しています、同じタイプの別のエンティティが既に同じprimary key値を持っているために失敗しました。これは、 『アタッチ』メソッドを使用するか、状態を設定するときに発生する可能性がありますグラフ内のエンティティのキ​​ー値が競合している場合、エンティティの「変更なし」または「変更済み」に変更することができます。

これにはどのような回避策がありますか?

public IHttpActionResult AddParticipant(int id) 
{ 
    var Participant = new ParticipantList 
    { 
     EventId = id, 
     ParticipantId = base.ControllerContext.RequestContext.Principal.Identity.GetUserId() 

    }; 

    db.ParticipantList.Add(Participant); 
    db.SaveChanges(); 

    var eventupdated = new Event() 
    { 
     Id = id, 
     ParticipantCount = db.Events.Find(id).ParticipantCount++ 
    }; 

    using (db) 
    { 
     db.Events.Attach(eventupdated); 
     db.Entry(eventupdated).Property(x => x.ParticipantCount).IsModified = true; 
     db.SaveChanges(); 
    } 

    return Ok(); 
} 
+1

次のコードで

var eventupdated = new Event() { Id = id, ParticipantCount = db.Events.Find(id).ParticipantCount++ }; using (db) { db.Events.Attach(eventupdated); db.Entry(eventupdated).Property(x => x.ParticipantCount).IsModified = true; db.SaveChanges(); } 

を交換してみてください。なぜ単に 'var event = db.Events.Find(id);ではありません。 event.ParticipantCount ++ ';それを保存しますか? –

答えて

0

eventupdated`は少し奇妙である `取得するための

var eventupdated = db.Events.Find(id); 
eventupdated.ParticipantCount= eventupdated.ParticipantCount++;//OR just eventupdated.ParticipantCount++; 
db.SaveChanges(); 
関連する問題