2012-02-12 13 views
8

DbSet.Add() agrega una única entidad a DbSet. Pero no hay DbSet.AddRange() para agregar una lista de entidades. ¿Hay algún método al que pueda llamar directamente desde EF que me permita agregar una lista de entidades? Si no es así, ¿hay algún motivo por el que EF no proporcione dicho método?Cómo agregar una lista de entidades a DbSet

+0

Puede escribir un método de extensión simple para lograr esto. – Eranga

+0

Esto es en lo que estoy trabajando ahora. Lo que me desconcertó es ¿por qué EF no lo proporciona? – hshen

+2

Es solo un método de utilidad que cualquiera puede escribir. Hay muchas clases de colección que no tienen un método 'AddRange'. Proporcionar una API simple con la funcionalidad central es mejor que una interfaz desordenada. – Eranga

Respuesta

6

El comentario de Eranga es posiblemente cierto. Supongo que la verdadera preocupación es qué debería hacerse si alguna entidad en la lista tiene la propiedad clave establecida si la clave para la tabla subyacente es una columna de identidad:

  • ¿Desea hacer una excepción? O
  • establece la clave en cero para que se inserte una entidad nueva con una clave diferente? O
  • ¿actualizar la entidad con la misma clave?

Por esta razón, no tiene demasiado sentido implementar AddRange() a la clase genérica DbSet. Si quieres algo especial ajustada a sus necesidades, es posible extender DbSet de la siguiente manera

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

En EF6 tanto DbSet.AddRange y DbSet.RemoveRange están disponibles.

El motivo para implementarlos es mejorar el rendimiento, lo que se hace desactivando DetectChanges para cada adición o eliminación individual de una entidad.

Más detalles:

NOTA: No hay todavía documentación oficial para este método, ya que EF es todavía RC1.

ACTUALIZACIÓN: EF6 ha sido lanzado, y the official documentation for .AddRange() is here, pero la explicación de lo que está sucediendo en su interior se encuentra en los enlaces de arriba.

Cuestiones relacionadas