ServiceStack MARS (conjuntos de resultados activos múltiples) utilizando ORMLite y parámetros de salida

dapper mars ormlite-servicestack servicestack stored-procedures

Pregunta

ServiceStack ORMLite es genial, normalmente me he alejado de la mentalidad de ORM y prefiero construir bases de datos, ya que tiene sentido crear bases de datos en lugar de un modelo de clase 1: 1. Dicho esto, hay un par de cosas con las que parece que estoy teniendo dificultades, estoy seguro de que es simplemente mi ignorancia brillando.

Primero:

¿Hay alguna forma de administrar múltiples conjuntos de resultados usando ORMLite? Sé que uno puede usar el método QueryMultiple usando Dapper, pero por alguna razón me está costando tiempo averiguar cómo usar la implementación integrada de Dapper de ServiceStack.

Segundo:

¿Hay alguna manera de usar ORMLite para devolver los parámetros de salida dentro de una llamada de procedimiento almacenado?

Idealmente, me gustaría alejarme de MARS y los parámetros de salida y, idealmente, me gustaría vivir en un mundo ideal :)

Estoy usando .NET Framework 4.5, SQL Server 2008 R2 y ServiceStack 3.9.46.

Respuesta aceptada

Resulta que esto es realmente bastante simple (suponiendo que conozcas la magia para hacerlo realidad).

Con base en la documentación y una publicación aparentemente engañosa que indica que Dapper está "incluido" en la maquinilla de afeitar , asumí que, cuando estaba implícito que Dapper estaba "incorporado", era esencialmente una parte de las bibliotecas incluidas.

Ríete si quieres, pero para aquellos de nosotros que no estamos iluminados, voy a describir cómo hacer aparecer las extensiones de Dapper. Así que aquí está la magia.

Usando la consola de Package Manager ejecuta lo siguiente:

Install-Package ServiceStack
Install-Package Dapper

Agregue las siguientes instrucciones de uso (C #) a su Servicio:

using ServiceStack.OrmLite;
using Dapper;

Ahora, cuando aproveche el objeto Db, todos los métodos OrmLite AND Dapper estarán allí.

Para obtener un parámetro de salida, ahora es tan simple como:

var p = new DynamicParameters();

p.Add("@param1", request.stuff1);
p.Add("@param2", request.stuff2);
p.Add("@param3", dbType: DbType.Int32, direction: ParameterDirection.Output);

Db.Execute("schema.sp_stored_proc_name", p, commandType: CommandType.StoredProcedure);

response.outputStuff = p.Get<int>("@param3");

Para administrar MARS (supongamos que tiene un SP que devuelve dos conjuntos de resultados Y un parámetro de salida):

p.Add("@param1", request.stuff1);
p.Add("@param2", request.stuff2);
p.Add("@param3", dbType: DbType.Int32, direction: ParameterDirection.Output);

var mars = Db.QueryMultiple("schema.sp_stored_proc_name", p, commandType: CommandType.StoredProcedure);

//firstSet contains the first result set
var firstSet = mars.Read().ToList();
//secondSet contains the second result set
var secondSet = mars.Read().ToList();

response.outputStuff = p.Get<int>("param3");

Es maravillosamente simple, una vez que conoces la magia :)

Aquí hay un ejemplo mucho más complicado .

Esperemos que esto ayude a alguien más y les ahorre un poco de tiempo.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow