La mejor forma de hacer inserciones masivas usando dapper.net

.net bulkinsert c# dapper sql-server

Pregunta

Estoy usando el siguiente código para insertar registros en una tabla en SQL Server 2014

using (SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["myConnString"]))
{

   conn.Execute("INSERT statement here", insertList);

}

La lista de insertList es una lista que tiene 1 millón de elementos. Probé esta inserción en una computadora de escritorio i5 y me llevó unos 65 minutos insertar un millón de registros en SQL Server en la misma máquina. No estoy seguro de cuán hábil es hacer las inserciones detrás de las escenas. ¡Ciertamente no quiero abrir y cerrar la conexión de la base de datos un millón de veces!

¿Es esta la mejor manera de hacer inserciones masivas en dapper o debería probar algo más o ir con ADO.Net simple utilizando la biblioteca Enterprise?

EDITAR

En retrospectiva, sé que usar ADO.Net será mejor, así que reformularé mi pregunta. Me gustaría saber si esto es lo mejor que puede hacer apuesto o me falta una forma mejor de hacerlo en Dapper.

Respuesta experta

La mejor manera gratuita de insertar con un rendimiento excelente es utilizar la clase SqlBulkCopy directamente como sugirieron Alex y Andreas.

Descargo de responsabilidad : soy el propietario del proyecto Dapper Plus

Este proyecto proporciona soporte sencillo para las siguientes operaciones:

  • BulkInsert
  • Actualización masiva
  • BulkDelete
  • BulkMerge

Al usar el mapeo y permitir el resultado como columnas de identidad.

// CONFIGURE & MAP entity
DapperPlusManager.Entity<Order>()
                 .Table("Orders")
                 .Identity(x => x.ID);

// CHAIN & SAVE entity
connection.BulkInsert(orders)
          .AlsoInsert(order => order.Items);
          .Include(x => x.ThenMerge(order => order.Invoice)
                         .AlsoMerge(invoice => invoice.Items))
          .AlsoMerge(x => x.ShippingAddress);   

Respuesta popular

Si el rendimiento es lo que buscas, te recomendaría usar SqlBulkCopy en lugar de insertarlo con Dapper. Vea aquí para algunas comparaciones de rendimiento: http://www.ikriv.com/dev/db/SqlInsert/SqlInsert.html



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué