Solución:
Tendrías que hacerlo de forma un poco diferente. En Dapper, coincide con la convención AKA, la propiedad o los nombres de campo son idénticos a los parámetros de SQL. Entonces, suponiendo que tuvieras 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 el MyObject
los nombres de propiedad A y B coinciden con los nombres de parámetro SQL @A y @B.
Si no desea cambiar el nombre de los objetos, puede usar tipos anónimos para hacer las asignaciones en lugar de 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:
Según el comentario de Marc Gravell, también puede hacer que Dapper haga el ciclo por usted:
string processQuery = "INSERT INTO PROCESS_LOGS VALUES (@A, @B)";
connection.Execute(processQuery, processList);
Creo que la inserción masiva es mejor que iterar 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