在 Entity Framework 中将对象列表添加到数据库上下文

Add object list to DB context in Entity Framework

这是一种方法,我们可以在数据库上下文中一个一个地添加项目以保存数据。

  List<AuditTrails> auditLogs= new List<AuditTrails>();

  foreach (AuditTrail a in auditLogs)
  {
      if (a.Operation == CreatedBy)
      {
         if (!string.IsNullOrEmpty(a.NewState))
             context.AuditTrails.Add(a);
      }
      else
         context.AuditTrails.Add(a);
  }
  context.SaveChanges();

没有Loop有什么办法吗?我正在与 Entity Framework 6 合作。 `

从技术上讲,不,但我认为您可以通过 ListForEach 方法获得您要查找的内容的要点。

auditLogs.Where(a =>
    (a.Operation == CreatedBy && !string.IsNullOrEmpty(a.NewState)) || 
    a.Operation != CreatedBy
).ToList().ForEach(a => context.AuditTrails.Add(a));

此外,您可以使用 AddRange 方法,但首先您必须按照@ChrisPratt 在他的回答中建议的那样过滤 collection:

var elementsToBeAdded=auditLogs.Where(a => (a.Operation == CreatedBy && !string.IsNullOrEmpty(a.NewState)) || 
                                            a.Operation != CreatedBy);
context.AuditTrails.AddRange(elementsToBeAdded);

如果 AutoDetectChangesEnabled 设置为 true(这是默认值),那么 DetectChanges 将在添加任何实体之前调用一次,并且不会再次调用。这意味着在某些情况下 AddRange 可能比多次调用 Add 执行得更好。请注意,已经处于某些其他状态的上下文中的实体会将其状态设置为 AddedAddRange 是 no-op 对于已经处于 Added 状态

的上下文中的实体