2016-05-31 11 views
1

エンティティフレームワークを使用してjsonの応答からデータベースを作成しています。今私は私の既存の値を更新する必要があります、または既に存在する場合、私はそれらを追加する必要があります。したがって、ミーティングIDが存在する場合は、他の参加者を追加してください。EFを使用してdb内の特定の列を更新する方法

私の追加方法はcorectllyで動作していますが、私の値を更新する方法はわかりません。ここで

は私のコードです:

foreach (Event eventItem in obj.events) 
{           
    using (Entities1 ctx = new Entities1()) 
    { 
     Event1 sas = new Event1 
     { 
      // ID= autoincr 
      // some custom values 


      MeetingID=eventItem.eventId 
      //Values to update        
      Attending=eventItem.attendingCount 

     };   
      ctx.Event1.Add(sas); 
      ctx.SaveChanges(); 

    } 

} 

答えて

2

アールが存在する場合は、DBからあなたのエンティティを取得する必要があります。また

using (Entities1 ctx = new Entities1()) 
{ 
    foreach (Event eventItem in obj.events) 
    {           
     var ev = ctx.Event1.FirstOrDefault(x=>x.eventId == eventItem.eventId); //get your entity from db (maby you should use other ID) 
     if(ev == null) //If have no elements add 
     { 
      Event1 sas = new Event1 
      { 
       // ID= autoincr 
       // some custom values 
       MeetingID=eventItem.eventId, 
       //Values to update        
       Attending=eventItem.attendingCount 
      };   
      ctx.Event1.Add(sas); 
     } 
     else // Else just update 
     { 
      ev.Attending = eventItem.attendingCount; 
     } 
    } 
    ctx.SaveChanges(); 
} 

を - それは私が全体の平和を包み込むように、各オブジェクトのコンテキストを作成しない方が良いでしょうコンテキスト内のコード。このようにして、すべての変更が1つのトランザクションになります。

+0

ありがとう –

1

あなたがUpsertしようとしているアイテムが新規/既存であるかどうかわかっている場合。これが正しいコードです。

これは、はるかに少ないデータベース呼び出しで作業を行うことができ、その結果、より高速なトランザクションが可能になります。

using(var ctx = new Context()) 
{ 
    foreach (Event eventItem in obj.events) 
    {           

     Event1 sas = new Event1 
     { 
      // ID= autoincr 
      // some custom values 


      MeetingID=eventItem.eventId 
      //Values to update        
      Attending=eventItem.attendingCount 

     }; 
     if(eventItem.eventId != null) 
     {   
       ctx.Event1.Add(sas); 
     } 
     else 
     { 
       ctx.Entry(sas).State = EntityState.Updated; 
     } 
    } 
    ctx.SaveChanges(); 
} 
関連する問題