J'ai décidé d'utiliser Dapper.net car il semble ne faire que ce que je veux: la cartographie, je n'ai besoin de rien de compliqué, je m'ennuie juste de gérer le mapping entre mon lecteur de données et mon objet.
Mon problème :
Disons que j'ai ces cours:
class Foo{
int ID;
string Name;
}
class Bar : Foo{
string FavoriteMoovie;
}
Et ces tables:
Foo
- ID
- Name
Bar
- FooID
- FavoriteMoovie
J'aimerais donc savoir comment sélectionner mes Foo et mes Bars dans la même requête?
Ma seule idée à ce jour est
Je ne peux pas utiliser la surcharge de la méthode "Query" car il y a juste ici pour les relations de mappage.
Très hacky, mais cela fonctionne probablement.
db.Query<Bar, object, Foo>("select * from Foo left join Bar on FooID = ID",
(bar,ignore) =>
bar.FavoriteMoovie == null ? bar : new Foo{ID = bar.ID, Name = bar.Name});
L'inconvénient est qu'il crée un couple d'objets intermédiaires dont il pourrait se passer.
D' autres options sont simplement sélectionner Bar
objets puis utiliser la même astuce pour filtrer le Foos ou sélectionnez une dynamique puis convertir à la bonne classe.
Personnellement, je ne voudrais pas interroger deux fois simplement pour gérer cela, sauf si vous autorisez NULL
FavoriteMoovie, auquel cas vous n'avez pas d'autre choix que de compliquer la requête ou de sélectionner deux fois.