Ho deciso di usare Dapper.net perché sembra che stia facendo solo quello che voglio: mappatura, non ho bisogno di niente di fantasia, sono solo annoiato a gestire la mappatura tra il mio datareader e il mio oggetto.
Il mio problema :
Diciamo che ho queste classi:
class Foo{
int ID;
string Name;
}
class Bar : Foo{
string FavoriteMoovie;
}
E queste tabelle:
Foo
- ID
- Name
Bar
- FooID
- FavoriteMoovie
Quindi mi piacerebbe sapere come posso selezionare il mio Foo e Bars nella stessa query?
La mia unica idea è finora
Non riesco a utilizzare l'overload del metodo "Query" perché ci sono solo qui per mappare le relazioni.
Molto hacky, ma probabilmente funziona.
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});
Lo svantaggio è che crea un paio di oggetti intermedi di cui potrebbe fare a meno.
Altre opzioni sono semplicemente selezionare gli oggetti Bar
e quindi utilizzare lo stesso trucco per filtrare i Foos o selezionare una dinamica e quindi convertire la classe corretta.
Personalmente non lo interrogherei due volte solo per gestirlo, a meno che tu non stia accettando NULL
FavoriteMoovie, nel qual caso non hai altra scelta che complicare la query o selezionare due volte.