Mappage de 4 tables sur un seul objet dans Dapper

dapper mapping

Question

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.

Réponse populaire

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.




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