2016-05-31 57 views
1

我正在填充我的數據庫從JSON響應與實體框架。現在我也必須更新我現有的值,或者如果它們已經存在,我必須添加它們。因此,如果會議ID存在,更新參加其他添加。如何更新數據庫中的某些列與EF

我的添加方法工作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

你應該從數據庫獲取你的實體,如果ARE存在:

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(); 
} 

而且 - 這是最好不爲每個對象創建上下文,所以我包裹的整個和平你的代碼在上下文中。這樣所有的更改都將在一次交易中完成。

+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(); 
}