2012-04-19 5 views
5

sto recupero dei dettagli del profilo con il seguente:Come ottenere valori per oggetti figlio usando Dapper ORM?

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

L'oggetto profilo contiene altre collezioni come profileImages. Il problema è che il conteggio oggetti per ogni oggetto figlio è zero. Inoltre voglio solo ottenere dati per dire, profileImages.

C'è qualcosa che deve essere impostato per interrogare gli oggetti figli e, in tal caso, è possibile specificare quale e per quanti livelli?

Ho anche provato 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

E ottenere il seguente errore:

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

ho provato le variazioni di ciò che è nel mio splitOn testo, ma ottengono ancora lo stesso errore.

risposta

8

Dapper non supporta una mappatura One-To-Many come questa fuori dalla scatola. Dai un'occhiata a questa domanda, potrebbe essere d'aiuto.

Multi-Mapping, one-to-many

Se la tabella PROFILEIMAGES ha un FK sui profili ID - si potrebbe emettere 2 querys e utilizzare il 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

Bello. In realtà mi piace molto meglio che restituire tutti i mapping 1 .. *, in quanto ciò potrebbe portare a oggetti complessi gonfiati. Certo, hanno un sacco di informazioni, ma forse un po 'che non è richiesto. In questo modo, posso chiedere esplicitamente a quali tabelle figlio voglio i dati. Grazie. – ElHaix