¿Hay alguna manera de llamar a un procedimiento almacenado con Dapper?

.net dapper orm stored-procedures

Pregunta

Estoy muy impresionado con los resultados de Dapper Micro ORM para stackoverflow.com. Lo estoy considerando para mi nuevo proyecto y tengo una preocupación acerca de que algunas veces mi proyecto requiere tener un procedimiento almacenado y he buscado mucho en la web pero no encontré nada con el procedimiento almacenado. Entonces, ¿hay alguna forma de que Dapper trabaje con un procedimiento almacenado?

Por favor, avíseme si es posible, de lo contrario tendré que extenderlo en mi camino.

Respuesta aceptada

En el caso simple puedes hacer:

var user = cnn.Query<User>("spGetUser", new {Id = 1}, 
        commandType: CommandType.StoredProcedure).First();

Si quieres algo más elegante, puedes hacer:

 var p = new DynamicParameters();
 p.Add("@a", 11);
 p.Add("@b", dbType: DbType.Int32, direction: ParameterDirection.Output);
 p.Add("@c", dbType: DbType.Int32, direction: ParameterDirection.ReturnValue);

 cnn.Execute("spMagicProc", p, commandType: CommandType.StoredProcedure); 

 int b = p.Get<int>("@b");
 int c = p.Get<int>("@c"); 

Además, puede usar el ejecutor en un lote, pero eso es más torpe.


Respuesta popular

Creo que la respuesta depende de las características de los procedimientos almacenados que necesita usar.

Los procedimientos almacenados que devuelven un conjunto de resultados se pueden ejecutar utilizando Query ; los procedimientos almacenados que no devuelven un conjunto de resultados se pueden ejecutar utilizando Execute , en ambos casos (utilizando EXEC <procname> ) como el comando SQL (más los parámetros de entrada según sea necesario). Ver la documentación para más detalles.

A partir de la revisión 2d128ccdc9a2 , no parece haber soporte nativo para los parámetros OUTPUT ; podría agregar esto o, alternativamente, construir un comando Query más complejo que declarara variables TSQL, ejecutara el SP recolectando los parámetros OUTPUT en las variables locales y finalmente los devolvió en un conjunto de resultados:

DECLARE @output int

EXEC <some stored proc> @i = @output OUTPUT

SELECT @output AS output1


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é