EF6插入或更新实体集合

时间:2016-02-10 13:49:09

标签: c# entity-framework insert-update

我有下一个代码:

using (var context = new DataContext())
{
    var dbHistoryItems = context.Set<HistoryItem>();

    var historyItems = history as HistoryItem[] ?? history.ToArray();
    var historyItemIds = historyItems.Select(c => c.Id);

    var existingEntities = dbHistoryItems.Where(h => historyItemIds.Contains(h.Id));
    if (existingEntities.Any())
    {
        var newEntities = historyItems.Where(h => !existingEntities.Select(e => e.Id).Contains(h.Id));
        dbHistoryItems.AddRange(newEntities);   
    }
    context.SaveChanges();
}

其中history是输入参数List<HistoryInfo>

当实体是新的(具有ID的实体在上下文中不存在)时,我将其添加到Context。 当实体存在时 - 我只想保存它(它可以被修改)。

此代码中的问题与Update有关。它不会更新现有实体。

UPD:

是否有最佳方式插入或更新实体集合,然后循环播放:

foreach(var item in collection)
{
   db.AddOrUpdate(item);
}
db.SaveChanges;

1 个答案:

答案 0 :(得分:1)

似乎EF没有检测到数组元素内的变化。但是你可以强制更新。请检查此Entity Framework 5 Updating a Record