Dapper - 使用单个查询映射多个一对多

时间:2017-06-13 16:04:38

标签: c# dapper

我正在尝试将单个查询的多个集合(一对多引用)映射到对象中。对象如下:

public class Item {
    public int Id { get; set; }
    public string Name { get; set; }
    public List<ItemDetail> Details { get; set; }
    public List<ItemHistory> Histories { get; set; }
    public List<ItemOrder> Orders { get; set; }
}

我创建了一个查询,它返回了我想要的所有内容,如下所示:

SELECT
i.[Id], i.[Name],
detail.[Id] ItemDetailId, detail.[Description] ItemDetailDescription,
history.[Id] ItemHistoryId, history.[Date] ItemHistoryDate,
history.[Description] ItemHistoryDescription,
order.[Id] ItemOrderId, order.[Date] ItemOrderDate, order.[Quantity] ItemOrderQuantity

FROM
[dbo].[Items] i
inner join [dbo].[ItemDetails] detail on i.[Id] = detail.[ItemId]
inner join [dbo].[ItemHistories] history on i.[Id] = history.[ItemId]
inner join [dbo].[ItemOrders] order in i.[Id] = order.[ItemId]

好的,我已经通过Nuget添加了Dapper,Query扩展方法不允许我连续映射多个类型。我如何通过Dapper.NET将上面的查询映射到上面的对象?

谢谢你们!

1 个答案:

答案 0 :(得分:0)

Dapper可以通过假设您的Id列名为Id / id(您可以通过 splitOn 参数进行配置)来拆分查询行。
此外,您需要使用QueryMultiple来收集列表(ItemDetail ...)