如何将实体列表添加到DbSet

8

DbSet.Add()方法可以向DbSet中添加一个实体。但是,没有像DbSet.AddRange()这样的方法可以添加一组实体。是否有办法我可以直接从EF中调用一个方法以添加一个实体列表?如果没有,那么EF为什么不提供这样的方法呢?


你可以编写一个简单的扩展方法来实现这个功能。 - Eranga
这是我现在正在处理的事情。让我困惑的是为什么EF没有提供它? - hshen
2
这只是一个任何人都可以编写的实用方法。有很多集合类没有AddRange方法。提供一个简单的API与核心功能比杂乱无章的界面更好。 - Eranga
1
在EF6中,已经实现了AddRange和RemoveRange。实现它们的原因是为了提高性能,而不是创建新的实用方法。 - JotaBe
2个回答

11

6

Eranga的评论可以说是正确的。我猜真正的问题在于,如果列表中的任何实体都设置了关键属性,那么应该采取什么措施,如果底层表的键是标识列:

  • 抛出异常?还是
  • 将键设置为零,以便插入具有不同键的新实体?还是
  • 更新具有相同键的实体?

因此,在泛型类DbSet中实现AddRange()并没有太多意义。如果您需要特定的内容,可以按以下方式扩展DbSet。

   public static class EFExtension 
   {

      public static void AddRange<TEntity>(this DbSet<TEntity> dbSet, IList<TEntity> entities) where TEntity : class
      {
        foreach (TEntity e in entities)
        {
            dbSet.Add(e);
        }
     }
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接