ServiceStack MARS (plusieurs ensembles de résultats actifs) utilisant les paramètres ORMLite et de sortie

dapper mars ormlite-servicestack servicestack stored-procedures

Question

ServiceStack ORMLite est génial, j'ai généralement évité la mentalité ORM préférant créer des bases de données car il est logique de créer des bases de données au lieu d'un modèle de classe 1: 1. Cela dit, il y a plusieurs choses que je semble rencontrer des difficultés, je suis certain que c'est simplement mon ignorance qui transparaît.

Premier:

Existe-t-il un moyen de gérer plusieurs jeux de résultats avec ORMLite? Je sais que l'on peut utiliser la méthode QueryMultiple en utilisant Dapper, mais pour une raison quelconque, j'ai un peu de temps à comprendre comment utiliser l'implémentation Dapper intégrée de ServiceStack.

Seconde:

Existe-t-il un moyen d'utiliser ORMLite pour renvoyer des paramètres de sortie dans un appel de procédure stockée?

Idéalement, je voudrais éviter les paramètres de MARS et de sortie et, idéalement, j'aimerais vivre dans un monde idéal :)

J'utilise .NET Framework 4.5, SQL Server 2008 R2 et ServiceStack 3.9.46.

Réponse acceptée

Il s'avère que c'est très simple (à condition de connaître la magie pour y arriver).

Sur la base de la documentation et d'un article apparemment trompeur indiquant que Dapper est "inclus" dans le rasoir, j'ai supposé que lorsque cela impliquait que Dapper était "intégré", il faisait essentiellement partie des bibliothèques incluses.

Riez si vous voulez, mais pour ceux d'entre nous qui ne sont pas éclairés, je vais vous expliquer comment faire apparaître les extensions Dapper. Alors, voici la magie.

A l'aide de la console du gestionnaire de packages, exécutez les opérations suivantes:

Install-Package ServiceStack
Install-Package Dapper

Ajoutez les éléments suivants à l'aide d'instructions (C #) à votre service:

using ServiceStack.OrmLite;
using Dapper;

Maintenant, lorsque vous exploitez l'objet Db, toutes les méthodes OrmLite AND Dapper seront présentes.

Pour obtenir un paramètre de sortie, il est maintenant aussi simple que:

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

Pour gérer MARS (supposons que vous ayez un SP qui renvoie deux jeux de résultats ET un paramètre de sortie):

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

C'est magnifiquement simple, une fois que vous connaissez la magie :)

Voici un exemple beaucoup plus compliqué .

J'espère que cela aidera quelqu'un d'autre et lui fera gagner un peu de temps.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi