Dapper múltiples objetos de una fila

c# dapper

Pregunta

Tengo una fila de la base de datos

select "John" Name, 
       "Male" Gender,
       20 Age,
       "Rex" PetName,
       "Male" PetGender,
       5 PetAge
       // ... many more ...

Usando Dapper, me gustaría sacar esta fila en dos objetos:

class Person
{
    public string Name { get; set; }
    public string Gender { get; set; }
    public int Age { get; set; }
    // ... many more ...
}    
class Pet
{
    public string PetName { get; set; }
    public string PetGender { get; set; }
    public int PetAge { get; set; }
    // ... many more ...
}

Nota: aquí no hay una relación jerárquica, simplemente intento mapear una fila de la base de datos en dos (o más) objetos.

¿Cómo puedo hacer esto usando Dapper?

  • Sé que puedo hacer esto devolviendo una dinámica y mapeando cada objeto manualmente, lo cual es doloroso ya que en mi escenario tenemos una gran cantidad de columnas. Prefiero no hacer esto. (Y no, no se puede rediseñar para requerir menos columnas).

Lo que he intentado:

  • He QueryMultiple<Person,Pet> , pero supone que estoy ejecutando varias consultas. En mi escenario de la vida real, esta es una consulta muy cara, y me gustaría ejecutarla solo una vez.
  • También investigué Query<Person,Pet,Tuple<Person,Pet>> , pero esto requiere una columna Id , aquí no hay ninguna relación heteroquímica o Id . Solo quiero tomar una sola fila y asignarla a varias columnas.

Respuesta aceptada

Estuviste muy cerca de la solución con el método Query . Si no tiene una columna Id , puede proporcionar un argumento splitOn :

connection.Query<Person, Pet, Tuple<Person, Pet>>(sql, 
    (person, pet) => Tuple.Create(person, pet), splitOn: "PetName");


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