2012-04-19 18 views
5

Estoy Obteniendo los detalles del perfil con lo siguiente:¿Cómo obtener valores para objetos secundarios utilizando Dapper ORM?

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

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

¿Hay algo que deba establecerse para consultar los objetos secundarios, y si es 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 conseguir el error siguiente:

When using the multi-mapping APIs ensure you set the splitOn param if you have keys other than Id Parameter name: splitOn

He tratado de variaciones de lo que está en mi splitOn texto, pero aún así obtener el mismo error.

Respuesta

8

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

Multi-Mapping, one-to-many

Si la tabla PROFILEIMAGES tiene un identificador de FK en los perfiles - que podría emitir 2 querys y utilizar 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(); 
} 
+0

Nice. De hecho, me gusta más que devolver todas las correlaciones de 1 ... *, ya que eso podría conducir a objetos complejos inflados. Claro que tienen mucha información, pero tal vez algo que no se requiere. De esta manera, puedo solicitar explícitamente de qué tablas secundarias quiero datos. Gracias. – ElHaix

Cuestiones relacionadas