Dapper et sous-classes

dapper

Question

Je travaille avec un modèle de données EF existant qui inclut des objets sous-classés. Cela fonctionne bien lorsque vous travaillez avec des objets individuels, mais est assez lent lorsque vous chargez un grand nombre d'objets à des fins d'analyse.

J'ai commencé à explorer Dapper comme alternative pour remplir les objets POCO utilisés pour l'analyse en lecture seule.

Le problème est que je ne vois aucun moyen de gérer correctement une hiérarchie d’objets.

Si j'ai

class MyBase
{
}

class MyDerived1 : MyBase
{
}

class MyDerived2 : MyBase
{
}

Dapper remplit correctement une liste de MyBase

var mine = conn.Query<MyBase>("SELECT * from MyTable");

La capacité Multimap ne semble pas résoudre le problème (ou quelque chose me manque-t-il?).

Existe-t-il un moyen de résoudre ce problème, à moins de faire un aller-retour dans la base de données pour chaque sous-classe?

Réponse acceptée

 public class MyBase
    {
        public String BaseProp { get; set; }
    }

    public class MyDerived1 : MyBase
    {
        public String Derived1Prop { get; set; }
    }

    public class MyDerived2 : MyBase
    {
        public String Derived2Prop { get; set; }
    }

Le multimapping ou une cartographie dynamique devrait faire l'affaire.

MM:

String query = "SELECT * FROM Table";

var res = conn.Query<MyBase, MyDerived1, MyDerived2, Tuple<MyBase, MyDerived1, MyDerived2>>(query, (b, d1, d2) => Tuple.Create(b, d1, d2), splitOn: "Derived1Id,Derived2Id");

entrer la description de l'image ici

Le mapping dynamique est également très cool et probablement plus flexible dans votre cas (merci @Sam!)

var res = conn.Query<dynamic>(query).Select(x => new Tuple<MyBase, MyDerived1, MyDerived2>(new MyBase() { BaseProp = x.BaseProp },
                                                                                                           new MyDerived1() { Derived1Prop = x.Derived1Prop },
                                                                                                           new MyDerived2() { Derived2Prop = x.Derived2Prop }));



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