Insertar una lista usando dapper

c# dapper sql sql-server

Pregunta

Quiero insertar var list = new List<string>{"Name 1", "Name 2"}; en una tabla de base de datos.

Hago script para usar en dapper

var sqlScript = "USE [LetoSnipment] INSERT INTO Card(Name, Id) VALUES(@Key, 1);"

Y estoy ejecutando script para insertar datos en una tabla

db.Execute(sqlScript, list);

¿Cómo debo escribir el script SQL (dapper) para insertar una colección de cadenas en una tabla?

Respuesta aceptada

Tendrás que hacerlo un poco diferente. En Dapper, coincide con la convención AKA propiedad o los nombres de campo que son idénticos a los parámetros de SQL. Entonces, suponiendo que tengas un MyObject :

public class MyObject
{
    public int A { get; set; }

    public string B { get; set; }
}

Y asumiendo processList = List<MyObject> , querrías hacer esto

foreach (var item in processList)
{
    string processQuery = "INSERT INTO PROCESS_LOGS VALUES (@A, @B)";        
    connection.Execute(processQuery, item);
}

Tenga en cuenta que los nombres de propiedad MyObject A y B coinciden con los nombres de los parámetros SQL @A y @B.

Si no desea cambiar el nombre de los objetos, puede usar tipos anónimos para realizar las asignaciones en lugar de los tipos concretos:

foreach (var item in processList)
{
    string processQuery = "INSERT INTO PROCESS_LOGS VALUES (@A, @B)";        
    connection.Execute(processQuery, new { A = item.A, B = item.B });
}

EDITAR:

Por el comentario de Marc Gravell, también puedes hacer que Dapper te haga un bucle:

string processQuery = "INSERT INTO PROCESS_LOGS VALUES (@A, @B)";        
connection.Execute(processQuery, processList);

Respuesta popular

Creo que la inserción masiva es mejor que repetir la lista e insertar una por una.

SqlTransaction trans = connection.BeginTransaction();

connection.Execute(@"
insert PROCESS_LOGS(Id, st_Time, ed_Time, td_Time)
values(@Id, @st_Time, @ed_Time, @td_Time)", processList, transaction: trans);

trans.Commit();

Referencia: https://stackoverflow.com/a/12609410/1136277



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é