¿Hay alguna forma de usar MultiMapping y QueryMultiple juntos en Dapper?

dapper

Pregunta

Tengo algunas consultas que necesito ejecutar juntas y puedo hacerlo usando la función QueryMultiple .

Pero en este caso no he podido averiguar cómo podría usar MultiMapping .

¿Alguien sabe una manera de lograr esto?

Respuesta aceptada

Creo que esto es lo que estás buscando, aunque es difícil de decir sin un ejemplo de la consulta que estás tratando de ejecutar.

var sql = @"Select * 
            From Parent 
            Left Join Child on Child.ParentID = Parent.ParentID 
            Where Parent.ParentID = @id
            ... more queries";

using(var reader = connection.QueryMultiple(sql, new {id=selectedId}))
{
    var stuff = reader.Read<Parent, Child, Parent>(
        (p,c)=> 
        {
            p.Child = c;
            return p;
        }, splitOn: "ChildId").Single();
    // Continue to read from the other queries in your sql.
}

Básicamente, el método Read de SqlMapper.GridReader es similar al método de extensión Query . Solo obtiene el parámetro splitOn con una de las sobrecargas que toma más de dos tipos genéricos.


Respuesta popular

Hay un ejemplo rápido tomado de otro hilo: how-to-get-values-for-child-objects

var sql = 
@"
select * from PROFILES where profileId= @id
select * from PROFILEIMAGES where OWNER_PROFILESIDFK = @id";

using (var multi = connection.QueryMultiple(sql, new {id=selectedId}))
{
   var profile = multi.Read<Models.PROFILE>().Single();
   profile.ProfileImages = multi.Read<Model.PROFILEIMAGES>().ToList();
} 

Cada consulta devuelve un conjunto de objetos que luego se pueden asignar a sus entidades.



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