2012-04-25 9 views

Odpowiedz

10

Myślę, że właśnie tego szukasz, choć trudno powiedzieć, bez przykładowego zapytania, które próbujesz wykonać.

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. 
} 

Zasadniczo Sposób SqlMapper.GridReaderRead jest podobny do sposobu Query przedłużacza. Parametr splitOn otrzymuje tylko jedno z przeciążeń, które ma więcej niż dwa typy ogólne.

1

Tam krótki przykład zaczerpnięty z innego wątku: 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(); 
} 

Każda kwerenda zwraca zestaw przedmiotów, które następnie mogą być przypisane do swoich jednostek.

+0

Dziękuję Alex. Ale szukam sposobu użycia funkcji [Multimapping] (https://github.com/SamSaffron/dapper-dot-net/blob/master/Tests/Tests.cs#L459) –

+0

Czy możesz podać przykład o tym, co próbujesz zrobić? – Alex

+1

Zasadniczo przechowuję niektóre pola denormalizowane w SQL (np. Pole DTags, w którym mam wszystkie znaczniki oddzielone ";", itd.). A kiedy używam QueryMultiple (metoda Read), nie ma opcji użycia parametru "split", jak w zapytaniach MultiMapping –