代码之家  ›  专栏  ›  技术社区  ›  Rizwan Shahid

将对象列表添加到实体框架中的DB上下文

  •  2
  • Rizwan Shahid  · 技术社区  · 11 年前

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

      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有什么办法吗?我正在使用实体框架6。 `

    2 回复  |  直到 11 年前
        1
  •  3
  •   Chris Pratt    11 年前

    从技术上讲,没有,但我认为,您可以通过 ForEach 方法 List .

    auditLogs.Where(a =>
        (a.Operation == CreatedBy && !string.IsNullOrEmpty(a.NewState)) || 
        a.Operation != CreatedBy
    ).ToList().ForEach(a => context.AuditTrails.Add(a));
    
        2
  •  2
  •   ocuenca    11 年前

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

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

    如果 AutoDetectChangesEnabled 设置为 true (这是默认值),然后 DetectChanges 将在添加任何实体之前调用一次,并且不会再次调用。这意味着在某些情况下 添加范围 可能比调用 Add 多次就可以了。请注意,已经处于其他状态的上下文中的实体的状态将设置为 Added . 添加范围 对于已在 补充 状态