简体   繁体   English

使用 Dapper 映射到嵌套对象

[英]Map to nested object using Dapper

I have an object that has 2 lists of classes.我有一个包含 2 个类列表的对象。

public class Order
{
    int order_id;
    double amount;
    List<order_item> order_items;
    List<order_shipment> order_shipments;
}

And here's how the objects should be mapped:以下是对象的映射方式:

SELECT * FROM Orders o
INNER JOIN Order_Items i ON i.order_id = o.order_id
INNER JOIN Order_Shipments s ON s.order_id = o.order_id

What's a way to map the above query to the nested class?将上述查询映射到嵌套类的方法是什么?

Give it a go:搏一搏:

var lookup = new Dictionary<int, Order>();
conn.Query<Order, order_item, order_shipment, Order>(@"
        SELECT o.*,i.*,s.* FROM Orders o
        INNER JOIN Order_Items i ON i.order_id = o.order_id
        INNER JOIN Order_Shipments s ON s.order_id = o.order_id 
    ", (o, i, s) => {
        Order order;
        
        if (!lookup.TryGetValue(o.order_id, out order))
              lookup.Add(o.order_id, order = o);
        
        order.order_items = order.order_items ?? new List<order_item>();
        order.order_items.Add(i);
         
        order.order_shipments = order.order_shipments ?? new List<order_shipment>();
        order.order_shipments.Add(s);
        
        return order;
    }).AsQueryable();
    
var result = lookup.Values;

See: How do I map lists of nested objects with Dapper请参阅: 如何使用 Dapper 映射嵌套对象列表

Update:更新:

Thanks, @Palle Due for pointing out.谢谢, @Palle Due指出。 You should also add splitOn parameter based on first column of tables as follows:(Assuming first column of Order_Items is order_item_id and Order_Shipment is order_shipment_id )您还应该根据表的第一列添加splitOn参数,如下所示:(假设Order_Items第一列是order_item_idOrder_Shipmentorder_shipment_id

 splitOn: "order_id, order_item_id, order_shipment_id"

See: Correct use of Multimapping in Dapper请参阅: 在 Dapper 中正确使用多重映射

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM