Héritage et Dapper.net

dapper

Question

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

  • SÉLECTIONNEZ tous les Foos qui ne sont pas des Bars
  • puis CHOISISSEZ toutes les barres

Je ne peux pas utiliser la surcharge de la méthode "Query" car il y a juste ici pour les relations de mappage.

Réponse populaire

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.



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