7

ServiceStack ORMLite è ottimo, in genere ho evitato la mentalità ORM preferendo creare database poiché ha senso creare database anziché un modello di classe 1: 1 . Detto questo, ci sono un paio di cose che mi sembrano essere in difficoltà, sono certo che è semplicemente la mia ignoranza a splendere.ServiceStack MARS (Set di risultati attivi multipli) utilizzando ORMLite e Parametri di uscita

Primo:

C'è un modo per gestire più set di risultati utilizzando ORMLite? So che si può usare il metodo QueryMultiple usando Dapper, ma per qualsiasi ragione mi stia passando un po 'di tempo a capire come usare l'implementazione Dapper integrata di ServiceStack.

Secondo:

Esiste un modo utilizzando ORMLite di restituire i parametri di output all'interno di una chiamata di stored procedure?

Idealmente, vorrei evitare di Marte e parametri di output e, idealmente mi piacerebbe vivere in un mondo ideale :)

sto utilizzando .NET Framework 4.5, SQL Server 2008 R2 e ServiceStack 3.9.46.

risposta

11

Si scopre che questo è davvero molto semplice (purché si conosca la magia per farlo accadere).

Basato sul documentation e un post apparentemente fuorviante che indica che Dapper is "included" in razor ho pensato che quando è stato insinuato che Dapper era "built-in" che era essenzialmente una parte delle librerie incluse.

Ridi se vuoi, ma per quelli di noi che non sono illuminati, ho intenzione di delineare come far apparire le estensioni di Dapper. Quindi ecco la magia.

Utilizzando la console di Package Manager eseguire il seguente:

Install-Package ServiceStack 
Install-Package Dapper 

Aggiungere le seguenti istruzioni using (C#) al vostro servizio:

using ServiceStack.OrmLite; 
using Dapper; 

Ora, quando si leva il Db oggetti tutti l'OrmLite E i metodi Dapper ci saranno.

Per ottenere un parametro di output è ora semplice come:

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"); 

Al fine di gestire MARS (si supponga di avere un SP che restituisce due set di risultati e di un parametro di uscita):

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"); 

E 'meravigliosamente semplice, una volta che si conosce la magia :)

Ecco un much more complicated example.

Speriamo che questo aiuti qualcun altro e risparmi un po 'di tempo.

+0

Come viene inizializzata la connessione db? Non riesco a trovare un esempio da nessuna parte per quello. – craigtadlock