Dapper y Subclases

dapper

Pregunta

Estoy trabajando con un modelo de datos EF existente que incluye objetos subclase. Eso funciona bien cuando se trabaja con objetos individuales, pero es bastante lento cuando se carga una gran cantidad de objetos para su análisis.

Empecé a explorar Dapper como una alternativa para poblar objetos POCO usados ​​para análisis de solo lectura.

El problema es que no veo ningún medio para manejar correctamente una jerarquía de objetos.

Si tengo

class MyBase
{
}

class MyDerived1 : MyBase
{
}

class MyDerived2 : MyBase
{
}

Dapper completa correctamente una lista de MyBase

var mine = conn.Query<MyBase>("SELECT * from MyTable");

La capacidad de Multimap no parece resolver el problema (¿o me falta algo?).

¿Hay alguna manera de resolver esto, excepto crear un viaje de ida y vuelta a la base de datos para cada subclase?

Respuesta aceptada

 public class MyBase
    {
        public String BaseProp { get; set; }
    }

    public class MyDerived1 : MyBase
    {
        public String Derived1Prop { get; set; }
    }

    public class MyDerived2 : MyBase
    {
        public String Derived2Prop { get; set; }
    }

Multimapping o un mapeo dinámico debería hacer el truco.

MM:

String query = "SELECT * FROM Table";

var res = conn.Query<MyBase, MyDerived1, MyDerived2, Tuple<MyBase, MyDerived1, MyDerived2>>(query, (b, d1, d2) => Tuple.Create(b, d1, d2), splitOn: "Derived1Id,Derived2Id");

enter image description here

El mapeo dinámico también es muy bueno y probablemente más flexible en su caso (¡Gracias @Sam!)

var res = conn.Query<dynamic>(query).Select(x => new Tuple<MyBase, MyDerived1, MyDerived2>(new MyBase() { BaseProp = x.BaseProp },
                                                                                                           new MyDerived1() { Derived1Prop = x.Derived1Prop },
                                                                                                           new MyDerived2() { Derived2Prop = x.Derived2Prop }));


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué