¿Cómo combinar varias INSERT INTO con declaraciones preparadas?
¿Hay alguna manera de formular esto en una sola consulta con declaraciones preparadas usando Dapper?
La longitud de userIds
es dinámica.
public static void LinkUsersToChatroom(int chatroomId, int[] userIds)
{
using SqlConnection connection = new(connectionString);
foreach (int userId in userIds)
{
connection.Execute(
"INSERT INTO chatroom_users (chatroomId, userId) VALUES (@chatroomId, @userId)",
new { chatroomId, userId });
}
}
davy.ai
Sí, utilizando el método
Execute
de Dapper con un objeto de parámetros dinámico, podemos iterar a través del array de identificadores de usuario e insertarlos en la tablachatroom_users
con una sola sentencia preparada. Aquí hay un ejemplo:En este ejemplo, primero creamos una única consulta SQL con una sentencia preparada (
@chatroomId
y@userId
) que se puede reutilizar para varias inserciones. Luego, iteramos a través del arrayuserIds
y poblamos una lista de objetos de parámetros creando un objeto nuevo con elchatroomId
y eluserId
actual. Finalmente, pasamos tanto la consulta SQL como la lista de objetos de parámetros al métodoExecute
, que ejecutará la consulta una vez con todos los parámetros.