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
Respuesta
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);
}
}
}
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.
- 1. Agregar una cadena a una lista
- 2. Agregar la entrada vacía al cuadro combinado vinculado a la lista de entidades
- 3. ¿Cómo agregar campos a las entidades en el roo-shell?
- 4. Agregar llamado vector a una lista
- 5. Agregar objetos a una lista J
- 6. ¿Cómo puedo agregar a la primera posición de una lista?
- 7. Cómo agregar un botón a cada fila de una lista?
- 8. include() en LINQ a Entidades consultar
- 9. ¿Agregar una lista a otra lista en java?
- 10. ¿Cómo agregar a una lista al usar Multi-Threading?
- 11. Cómo convertir DbSet en Entity Framework a ObjectQuery
- 12. Agregar modelos a la lista
- 13. ObjectSet.Context vs DbSet
- 14. Cómo migrar de entidades simples a entidades de seguimiento automático?
- 15. Agregar un objeto a una lista de Python
- 16. Agregar un método a una instancia de lista en python
- 17. ¿Puedo agregar una operación a una lista en Python?
- 18. Usando jquery, ¿cómo animar agregar un nuevo elemento de lista a una lista?
- 19. ¿es posible agregar una lista a una estructura?
- 20. EntityFramework 4, DbSet y ObjectContext
- 21. Entity Framework 4.1 DbSet Reload
- 22. Agregue una fecha en Linq a entidades
- 23. Agregar un control a una lista de controles dinámicamente
- 24. Agregar elementos a una lista de listas en python
- 25. Agregar animación a una Vista de lista en Android
- 26. ¿Cómo agregar elementos de una matriz de cadenas a una lista de matriz de cadenas?
- 27. Agregar a una ICollection
- 28. Cómo agregar la Lista <> a una Lista <> en asp.net
- 29. Cómo agregar lista de balas mediante programación a NSTextView
- 30. Usar un bucle para agregar objetos a una lista (python)
Puede escribir un método de extensión simple para lograr esto. – Eranga
Esto es en lo que estoy trabajando ahora. Lo que me desconcertó es ¿por qué EF no lo proporciona? – hshen
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