J'ai une question rapide sur Dapper. J'ai une requête qui renvoie 4 tables.
Trois tables ont une seule colonne entière. Appelez-les field1, field2 et field3.
Le 4ème tableau comporte 5 colonnes: A, B, C, D, E.
J'ai créé un objet appelé ResultSet
qui contient tous les champs des 4 tables
public class ResultSet
{
int field1;
int field2;
int field3;
string A;
string B;
string C;
string D;
string E
}
Comment mapper les résultats à l'objet ResultSet
?
Actuellement, j'utilise QueryMultiple
pour obtenir le résultat souhaité. Mais il ne fait que cartographier les 3 premières colonnes. A, B, C, D et E sont tous nuls.
Je ne veux pas utiliser une union pour obtenir tous les champs dans une seule table.
Vous devriez pouvoir y parvenir en remettant la méthode d'extension connection.Query à une instruction SQL paramétrée appropriée et en lui passant votre objet en tant que paramètre Type.
Dapper mappera ensuite votre requête à l'objet comme par magie, en supposant que vous alias les éléments de la liste de sélection de manière appropriée (c'est-à-dire, les alias avec le nom de propriété correspondant de votre objet).
Quelque chose dans ce sens devrait fonctionner:
public class SomeObject
{
public int Field1 {get; set;}
public int Field2 {get; set;}
public int A {get; set;}
public int B {get; set;}
public int C {get; set;}
public int D {get; set;}
}
using(var connection = SomeConnectionFactory.GetConnection())
{
var yourObject =
connection.Query<SomeObject>("select tab1.someThing as Field1, " +
"tab2.someThing as Field2, " +
"tab4.onePotato as A, " +
"tab4.twoPotato as B, " +
"tab4.threePotato as C, " +
"tab4.four as D " +
"from someTable tab1 " +
"join someTable2 tab2 on tab1.Id = tab2.Id " +
"$$ etc etc for the other joins $$" +
"where tab1.Id = :ID " + ,new {ID = someId});
};
Une note est que j'ai utilisé la syntaxe de la variable de liaison pour une base de données Oracle (:). Vous devrez remplacer cela par l'équivalent de votre base de données.
J'espère que c'est utile.