我有下一个代码:
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;