2016-06-15 3 views

ответ

2

QueryMultiple используются, когда вы обращаетесь несколько наборов результатов, т.е. мультипликатора select, как:

select * from Order where [email protected] 
select * from Invoice where Id = (...probably some sub-query) 

На данный момент нет встроенного API, чтобы сшить этот тип запроса вместе ; вместо того, чтобы вы могли бы сделать что-то вроде:

using(var multi = conn.QueryMultiple(...)) { 
    var order = multi.ReadSingle<Order>(); 
    order.Invoice = multi.ReadSingleOrDefault<Invoice>(); // could be null if 0 rows 
    return order; 
} 

Я хотел бы добавить улучшенный API для этого сценария, но это очень неудобно, чтобы выразить «присоединиться к этому к тому, что с помощью этого свойства, как ассоциации, где {это }. {SomeMember} равно {that}. {SomeOtherMember} ".

Однако, если вы на самом деле делаете один запрос, например:

select o.*, i.* 
from Order o 
left outer join Link l on ... 
left outer join Invoice i on ... 
where o.Id = @id 

, то вы можете использовать различные Query<,...,> перегрузки; например:

int id = ... 
var order = conn.Query<Order, Invoice, Order>(sql, 
    (x,y) => {x.Invoice = y; return x;}, args: new { id }, splitOn: "NumOrder").Single();