2016-05-31 61 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(); 
}