hshen
hshen

Reputation: 476

How to add a list of entities to DbSet

DbSet.Add() adds a single Entity to DbSet. But there is no DbSet.AddRange() to add a list of entities. Is there a method I can call directly from EF that allows me to add a list of Entities? If not, is there any reason why EF does not provide such a method?

Upvotes: 9

Views: 20783

Answers (2)

JotaBe
JotaBe

Reputation: 39025

In EF6 both DbSet.AddRange and DbSet.RemoveRange are available.

The reason to implement them is to improve the performance, what is done by disabling DetectChanges for each individual addition or removal of an entity.

More details:

NOTE: There isn't still official documentation for this method, as EF is still RC1.

UPDATE: EF6 has been release, and the official documentation for .AddRange() is here, but the explanation of what's happening inside it's in the links above.

Upvotes: 11

hshen
hshen

Reputation: 476

Eranga's comment is arguably true. I guess that the real concern is what should be done if any entity in the list has the key property set if the key for underlying table is an identity column:

  • Throw a exception? OR
  • set key to zero so a new entity with different key will be inserted? OR
  • update the entity with same key?

For this reason, it does not make too much sense to implement AddRange() to the generic class DbSet. If you want something particular fitting your need, you may extend DbSet as following

   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);
        }
     }
  }

Upvotes: 6

Related Questions