Asignación de 4 tablas a un solo objeto en Dapper

dapper mapping

Pregunta

Tengo una pregunta rápida sobre Dapper. Tengo una consulta que devuelve 4 tablas.

Tres tablas tienen solo una columna entera. Llámelos campo1, campo2 y campo3.

La 4ta tabla tiene 5 columnas dicen: A, B, C, D, E.

He creado un objeto llamado ResultSet que tiene todos los campos de las 4 tablas

public class ResultSet
{
    int field1;
    int field2;
    int field3;
    string A;
    string B;
    string C;
    string D;
    string E
}

¿Cómo mapeo los resultados al objeto ResultSet ?

Actualmente estoy usando QueryMultiple para obtener el resultado deseado. Pero solo está mapeando las primeras 3 columnas. A, B, C, D y E son todos nulos.

No quiero usar una unión para obtener todos los campos en una sola tabla.

Respuesta popular

Debería poder lograr esto al entregar la conexión. El método de extensión de consulta es una declaración de SQL parametrizada apropiada y pasarle su objeto como el parámetro Tipo.

Dapper luego asignará su consulta al objeto de forma mágica, suponiendo que alias los elementos de la lista de selección de forma adecuada (es decir, los alía con el nombre de propiedad correspondiente de su objeto).

Algo en esta línea debería funcionar:

public class SomeObject
{
   public int Field1 {get; set;}
   public int Field2 {get; set;}
   public int A {get; set;}
   public int B {get; set;}
   public int C {get; set;}
   public int D {get; set;}
}

using(var connection = SomeConnectionFactory.GetConnection())
{
    var yourObject = 
        connection.Query<SomeObject>("select tab1.someThing as Field1, " +
                                     "tab2.someThing as Field2, " +
                                     "tab4.onePotato as A, " +
                                     "tab4.twoPotato as B, " +
                                     "tab4.threePotato as C, " +
                                     "tab4.four as D " +
                                     "from someTable tab1 " +
                                     "join someTable2 tab2 on tab1.Id = tab2.Id " +
                                     "$$ etc etc for the other joins $$" +
                                    "where tab1.Id = :ID " + ,new {ID = someId});
};

Una nota es que he utilizado la sintaxis de la variable de vinculación para una base de datos Oracle (:). Necesitarás reemplazar esto con el equivalente para tu DB.

Espero que sea útil.



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é