Reputation: 476
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
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
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:
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