No puedo encontrar ningún ejemplo sobre cómo hacer una inserción masiva o por lotes utilizando Linq para las entidades. ¿Ustedes saben cómo hacer una inserción masiva?Cómo hacer una inserción masiva - Linq a las entidades
Respuesta
A veces simplemente tiene que mezclar modelos. Tal vez use SqlBulkCopy
para esta parte de su repositorio (ya que esto se conecta directamente a la API de copiado masivo), y Entity Framework para algo del resto. Y si es necesario, un poco de ADO.NET directo. En definitiva, el objetivo es hacer el trabajo.
Para obtener un ejemplo perfecto de cómo hacer inserciones masivas con LINQ to Entities, consulte http://archive.msdn.microsoft.com/LinqEntityDataReader. Es un contenedor que permite el uso fácil de SqlBulkCopy.
@Marc Gravell es correcto, a veces hay que mezclar modelos para hacer el trabajo.
Escribí una clase que insertará a granel entidades EF (o cualquier tipo de objeto, siempre que los nombres de las propiedades coincidan con los nombres de las columnas).
La clase admite la personalización del tamaño de lote, pre & eventos de inserción de inserción, inserciones en cola y "modo firehose" (otorgarle mil millones de objetos, respetará el tamaño del lote).
- El código:
BulkInserter<T>
- How to use it
Para insertar una enorme cantidad de datos en una base de datos, que utiliza para recopilar toda la información de la inserción en una lista y convertir esta lista en un DataTable
. Luego inserto esa lista en una base de datos a través del SqlBulkCopy
.
dónde envío mi lista generada LiMyList
que contienen información de todos los datos a granel que quiero insertar a la base de datos
y pasarlo a mi operación de inserción mayor
InsertData(LiMyList, "MyTable");
Dónde InsertData
es
public static void InsertData<T>(List<T> list,string TabelName)
{
DataTable dt = new DataTable("MyTable");
clsBulkOperation blk = new clsBulkOperation();
dt = ConvertToDataTable(list);
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
using (SqlBulkCopy bulkcopy = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["SchoolSoulDataEntitiesForReport"].ConnectionString))
{
bulkcopy.BulkCopyTimeout = 660;
bulkcopy.DestinationTableName = TabelName;
bulkcopy.WriteToServer(dt);
}
}
public static DataTable ConvertToDataTable<T>(IList<T> data)
{
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
DataTable table = new DataTable();
foreach (PropertyDescriptor prop in properties)
table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
foreach (T item in data)
{
DataRow row = table.NewRow();
foreach (PropertyDescriptor prop in properties)
row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
table.Rows.Add(row);
}
return table;
}
Puede hacerlo usando bulk insert extension
Utiliza SqlBulkCopy y lector de datos personalizado para obtener el máximo rendimiento. Como resultado, es más de 20 veces más rápido que el uso regular o inserción AddRange
Muestra de utilizar la extensión efbulkinsert:
context.BulkInsert(hugeAmountOfEntities);
Esta es una impresionante biblioteca. He escrito cosas SqlBulkCopy desde cero antes, pero esto es mucho más fácil y rápido – Andrew
- 1. Supresión masiva en LINQ a entidades
- 2. inserción masiva con linq-to-sql
- 3. es SSIS inserción masiva lo mismo que una inserción masiva
- 4. Borrar todo/Inserción masiva
- 5. SQLBulkCopy o inserción masiva
- 6. Python + MySQL - Inserción masiva
- 7. Inserción masiva en dispositivo Android
- 8. LINQ a las entidades Únete en DateTime.DayOfWeek
- 9. LINQ a las entidades y Lazy Loading
- 10. condicional incluir en linq a las entidades?
- 11. ¿Cómo hacer IZQUIERDA UNIÓN en LINQ a Entidades?
- 12. NHibernate no parece hacer Inserción masiva en PostgreSQL
- 13. combinación interna en LINQ a las entidades
- 14. linq a las entidades generadas sql
- 15. Inserción masiva con SQLAlchemy ORM
- 16. ¿Cómo realizo eficientemente una inserción o actualización masiva con SQLAlchemy?
- 17. Linq a Entidades con WCF
- 18. LINQ a Entidades EF4
- 19. Linq a entidades: Uniones + Distintas
- 20. Agregue una fecha en Linq a entidades
- 21. Campos de ancho fijo de inserción masiva
- 22. Inserción masiva en Oracle utilizando .NET
- 23. Inserción masiva en el servidor Sql
- 24. Inserción masiva O actualización con hibernación?
- 25. Inserción masiva paralela con SqlBulkCopy y Azure
- 26. ¿Cómo ejecutar una consulta de actualización/eliminación masiva en Linq?
- 27. inserción masiva de Java en Oracle
- 28. Optimización del rendimiento de inserción masiva ...?
- 29. Inserción masiva en Laravel con ORM elocuente
- 30. LINQ a las entidades + Incluir + Anónimo tema tipo
oh no - vínculo roto –
encontrado aquí ... https://github.com /matthewschrager/Repository/blob/master/Repository.EntityFramework/EntityDataReader.cs –