Lote insertar / actualizar llamadas con un parámetro de lista en una sola operación / solicitud a la base de datos en Dapper

c# dapper orm sql-server

Pregunta

Basado en este código en la página github de Dapper, creé una declaración de inserción masiva. enter image description here

Dapper dividió la consulta en múltiples instrucciones de inserción de SQL individuales (como se ve en el generador de perfiles de SQL).

¿Es posible indicarle que cambie varias operaciones en una sola operación para reducir el número de viajes de base de datos sin tener que crear manualmente varias instrucciones de inserción como se muestra a continuación?

insert into test (a,b) values (b,c);
insert into test (a,b) values (d,e);
insert into test (a,b) values (f,g);

Respuesta aceptada

¿Es posible indicarle que cambie varias operaciones en una sola operación?

No

En general, hay dos respuestas para permitir realizar operaciones masivas:

SqlBulkCopy

Como @ iSR5 respondió en la sección de comentarios: https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlbulkcopy

No encontrarás nada más rápido que esto.

Dapper Plus

Descargo de responsabilidad : soy el propietario del proyecto Dapper Plus

Este proyecto no es gratuito, pero ofrece todas las operaciones a granel:

  • BulkInsert
  • Actualización masiva
  • BulkDelete
  • BulkMerge

(Usar debajo del capó SqlBulkCopy )

Y algunas opciones más, como la salida de valores 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);   

EDITAR: responder comentario

SqlBulkCopy solo se puede usar con MS SQL Server. ¿No es así?

Exactamente, SqlBulkCopy solo es compatible con SQL Server. Nuestra biblioteca admite múltiples proveedores:

  • servidor SQL
  • SQL Compact
  • Oráculo
  • MySql
  • PostgreSQL
  • SQLite
  • Firebird


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é