¿Admite Dapper la inserción de múltiples filas en una sola consulta?

dapper mariadb mysql

Pregunta

¿ StackExchange.Dapper es compatible con la siguiente sintaxis SQL?

INSERT INTO MyTable (a, b, c)
VALUES
  (1, 2, 3),
  (4, 5, 6),
  (7, 8, 9);

He visto algunos ejemplos en los que puede pasar una lista para insertar, pero las descripciones que he visto sugieren que se trata de un bucle y que hace varias inserciones.

Mi investigación sugiere que hacer una sola consulta con varias filas es más rápido, por lo que tengo curiosidad por saber si Dapper lo admite con una lista o no.

Respuesta popular

No, no.

En realidad, la inserción masiva es uno de los temas más discutidos. Nunca encontré la solución que está buscando con Dapper.

Un truco que puedo imaginar (no estoy seguro, nunca intenté) es pasar DynamicParameters reemplazando tus valores reales (1, 2, 3 ...). Entonces su consulta se convierte en algo así como a continuación:

INSERT INTO MyTable (a, b, c)
VALUES
  (@1, @2, @3),
  (@4, @5, @6),
  (@7, @8, @9);

Y pasa en DynamicParameters algo como a continuación:

var param = new DynamicParameters();
param.Add("@1", ...);
param.Add("@2", ...);
param.Add("@3", ...);
param.Add("@4", ...);
....

Como dije antes, esto es lo que imagino ; No lo he probado. Incluso si esto funciona, esta no será una buena solución ya que el costo de construcción de cuerdas será alto y la administración de demasiados parámetros será difícil. Además, existe una limitación en el lado RDBMS de cuántos parámetros máximos puede pasar. Por lo tanto, no estoy recomendando esto.

Si el número de registros no es demasiado O si el rendimiento no es tan crítico (aún importante, estoy de acuerdo), pasar la consulta List para INSERT (como mencionaste en la pregunta) funciona muy bien. Envolver Execute llamada en Transacción puede ayudar.

De lo contrario, generalmente se recomiendan las siguientes soluciones:

  1. Bypass Dapper; usa ADO.NET.
  2. Use el procedimiento almacenado con el parámetro de tabla definida por el usuario.
  3. Pasar los parámetros de la tabla valorada con Dapper
  4. Utilice alguna otra herramienta como SqlBulkCopy , Dapper Plus , MicroOrm.Dapper.Repositories , etc.
    Nunca he usado esas herramientas; así que no estoy al tanto de su desempeño u otros inconvenientes.


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é