gpt4 book ai didi

c# - 如何使用 Automapper 映射父/子集合模型?

转载 作者:太空狗 更新时间:2023-10-29 23:09:09 25 4
gpt4 key购买 nike

我编写了一个简单的父子场景,但无法使用 Automapper 对其进行映射。在以下场景中,我希望将 OrderItems 列表映射到 dtoOrderItems 列表,但它不会自动发生。我是否需要使用 for 循环或其他方式手动编写它?

public class Order
{
public int OrderNumber {get; set;}
public List<OrderItem> OrderItems { get; set; }

public Order()
{
OrderItems = new List<OrderItem>();
OrderItems.Add(new OrderItem() {Quantity= 10});
}
}

public class OrderItem
{
public int Quantity {get; set;}
}

public class DTOOrder
{
public int DTOOrderNumber { get; set; }
public List<DTOOrderItem> DTOOrderItems { get; set; }

public DTOOrder()
{
DTOOrderItems = new List<DTOOrderItem>();
}
}

public class DTOOrderItem
{
public int DTOQuantity { get; set; }
}


public DTOOrder TestConversion ()
{
AutoMapper.Mapper.CreateMap<OrderItem, DTOOrderItem>();
AutoMapper.Mapper.CreateMap<Order, DTOOrder>();

Order order = new Order();
var dtoOrder = AutoMapper.Mapper.Map<Order, DTOOrder>(order);
return dtoOrder;
}

最佳答案

您没有映射集合的原因是:一个集合名称是 OrderItems,另一个是 DTOOrderItems。 Automapper 按名称映射属性 ( Case sensitive ) 并且无法解决此问题。
解决这个问题:
1) 将 DTOOrderItems(在您的 DTO 类中)重命名为 OrderItems
或者
2) 使用 Automapper API 中的 ForMember 方法覆盖此属性的映射。像这样:

AutoMapper.Mapper.CreateMap<Order, DTOOrder>()
.ForMember(o => o.OrderItems, dto => dto.DTOOrderItems)

与 Quantity 和 OrderNumber 属性相同的问题。

关于c# - 如何使用 Automapper 映射父/子集合模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13024506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com