Comment obtenir des valeurs pour les objets enfants à l'aide de Dapper ORM?

c#-4.0 dapper orm

Question

Je récupère les détails du profil avec les éléments suivants:

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

L'objet de profil contient d'autres collections telles que profileImages. Le problème est que le nombre d'éléments pour chaque objet enfant est zéro. Aussi, je veux seulement obtenir des données pour, par exemple, profileImages.

Faut-il configurer quelque chose pour interroger les objets enfants, et si oui, est-il possible de spécifier lequel et pour combien de niveaux?

J'ai aussi essayé le multi-mapping:

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

Et obtenir l'erreur suivante:

Lorsque vous utilisez les API de mappage multiple, assurez-vous de définir le paramètre splitOn si vous avez des clés autres que Id Nom du paramètre: splitOn

J'ai essayé des variantes de ce qui se trouve dans mon texte splitOn, mais j'obtiens toujours la même erreur.

Réponse acceptée

Dapper ne prend pas en charge un mappage one-to-many comme celui-ci. Consultez cette question, mais cela peut aider.

Multi-cartographie, un à plusieurs

Si votre table PROFILEIMAGES a un FK sur PROFILES ID - vous pouvez émettre 2 requêtes et utiliser le 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();
} 


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi