Erbschaft und Dapper.net

dapper

Frage

Ich entschied mich Dapper.net zu benutzen, weil es anscheinend nur das macht, was ich will: Mapping, ich brauche nichts Besonderes, ich bin nur gelangweilt, um das Mapping zwischen meinem Datenreader und meinem Objekt zu handhaben.

Mein Problem :

Sagen wir, ich habe diese Klasse:

class Foo{
int ID;
string Name;
}
class Bar : Foo{
string FavoriteMoovie;
}

Und diese Tabellen:

Foo 
- ID
- Name

Bar
- FooID
- FavoriteMoovie

Also würde ich gerne wissen, wie ich meine Foo und Bars in derselben Abfrage auswählen kann?

Meine einzige Idee ist bisher

  • WÄHLEN Sie alle Foos aus, die keine Balken sind
  • dann wähle ALLE Bars

Ich kann die Überladung der Methode "Query" nicht verwenden, da es hier nur Mapping-Beziehungen gibt.

Beliebte Antwort

Sehr hackig, aber das funktioniert wahrscheinlich.

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});

Nachteil ist, dass es ein paar Zwischenobjekte erstellt, auf die es verzichten könnte.

Andere Optionen sind, einfach Bar Objekte auszuwählen und dann mit demselben Trick die Foos herauszufiltern oder eine Dynamik auszuwählen und dann in die richtige Klasse umzuwandeln.

Persönlich würde ich nicht zweimal fragen, um dies zu behandeln, es sei denn, Sie erlauben NULL FavoriteMoovie. In diesem Fall haben Sie keine andere Wahl, als entweder die Abfrage zu komplizieren oder zweimal auszuwählen.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum