如何使用EF更新db中的某些列

时间:2016-05-31 08:23:01

标签: entity-framework linq

我使用实体框架从json响应填充我的数据库。现在我还必须更新我现有的值,或者如果它们已经存在,我必须添加它们。因此,如果存在会议ID,请更新Attending else add。

我的添加方法是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 个答案:

答案 0 :(得分: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 :(得分: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();
}