2012-04-25 3 views

Répondre

10

Je pense que c'est ce que vous cherchez, mais c'est difficile à dire sans un exemple de la requête que vous essayez d'exécuter.

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, splitOn: "ChildId"); 
    // Continue to read from the other queries in your sql. 
} 

Fondamentalement, le procédé Read du SqlMapper.GridReader est similaire à la méthode d'extension Query. Vous obtenez uniquement le paramètre splitOn avec l'une des surcharges qui prend plus de deux types génériques.

1

Theres un exemple rapide provenant d'un autre fil: 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(); 
} 

Chaque requête renvoie un ensemble d'objets qui peuvent ensuite être mis en correspondance avec vos entités.

+0

Merci Alex. Mais je cherche un moyen d'utiliser la fonction [Multimapping] (https://github.com/SamSaffron/dapper-dot-net/blob/master/Tests/Tests.cs#L459) –

+0

Pourriez-vous donner un exemple sur ce que vous essayez de faire? – Alex

+1

Fondamentalement, je stocke certains champs dénormalisés en SQL (par exemple: un champ DTags où j'ai tous les tags séparés par ";", etc). Et quand j'utilise le QueryMultiple (méthode Read) il n'y a pas d'option pour utiliser le paramètre "split" comme dans les requêtes MultiMapping –

Questions connexes