¿Cómo obtener valores para objetos secundarios utilizando Dapper ORM?

c#-4.0 dapper orm

Pregunta

Estoy recuperando detalles del perfil con lo siguiente:

var profiles = connection.Query<Models.PROFILE>(
    "SELECT * FROM PROFILES WHERE ID=@ID", 
    new { ID = profileID }); // IEnumerable
var profile = profiles.First<Models.PROFILE>();

El objeto de perfil contiene otras colecciones como profileImages. El problema es que el recuento de elementos para cada objeto secundario es cero. También solo quiero obtener datos para decir, profileImages.

¿Hay algo que deba configurarse para consultar los objetos secundarios y, de ser así, es posible especificar cuál y para cuántos niveles?

También he intentado multimapping:

var profiles = connection.Query<Models.PHOTOS_PERMISSIONS,
                                Models.PROFILE,
                                Models.PHOTOS_PERMISSIONS>(sql,
                    (p1, p2) => { p1.ID = profileID; return p1; }, 
                    new { ID = profileID }, 
                    splitOn: "OWNER_PROFILESIDFK, ID").AsQueryable();

PHOTOS_PERMISSIONS.OWNER_PROFILESIDFK = PROFILE.ID

Y obteniendo el siguiente error:

Cuando utilice las API de asignación múltiple, asegúrese de configurar el parámetro splitOn si tiene otras claves que no sean Id. Nombre del parámetro: splitOn

He intentado variaciones de lo que hay en mi texto de SplitOn, pero sigo teniendo el mismo error.

Respuesta aceptada

Dapper no es compatible con un mapeo One-To-Many como este de la caja. Mira esta pregunta, aunque puede ayudar.

Multi-Mapping, uno a muchos

Si su tabla PROFILEIMAGES tiene un FK en la ID de PERFILES, podría emitir 2 consultas y usar el GridReader.

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


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