我使用实体框架从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();
}
}
答案 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();
}