Herencia y Dapper.net

dapper

Pregunta

Decidí usar Dapper.net porque parece estar haciendo solo lo que quiero: mapeo, no necesito nada sofisticado, estoy aburrido de manejar el mapeo entre mi lector de datos y mi objeto.

Mi problema :

Digamos que tengo esta clase:

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

Y estas tablas:

Foo 
- ID
- Name

Bar
- FooID
- FavoriteMoovie

Entonces, ¿me gustaría saber cómo puedo seleccionar mi Foo y Bars en la misma consulta?

Mi única idea hasta ahora es

  • SELECCIONE todos los foos que no son barras
  • luego SELECCIONE todas las barras

No puedo usar la sobrecarga del método "Query" porque solo está aquí para mapear relaciones.

Respuesta popular

Muy hacky, pero esto probablemente funcione.

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

La desventaja es que crea un par de objetos intermedios que podría prescindir.

Otras opciones son simplemente seleccionar objetos de la Bar y luego usar el mismo truco para filtrar Foos o seleccionar una dinámica y luego convertirla a la clase correcta.

Personalmente, no haría consultas dos veces solo para manejar esto, a menos que esté permitiendo NULL FavoriteMoovie, en cuyo caso no tiene más remedio que complicar la consulta o seleccionar dos veces.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow