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

use*_*363 5 c# automapper

我编写了一个简单的父子方案,无法使用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;
}
Run Code Online (Sandbox Code Playgroud)

pet*_*kyy 6

您没有映射集合的原因是:一个集合名称是OrderItems,另一个是DTOOrderItems.Automapper按名称映射属性(区分大小写),但无法解决此问题.
要解决此问题:
1)将DTOOrderItems(在您的DTO类中)重命名为OrderItems

2)使用Automapper API中的ForMember方法覆盖此属性的映射.像这样的东西:

AutoMapper.Mapper.CreateMap<Order, DTOOrder>()
    .ForMember(o => o.OrderItems, dto => dto.DTOOrderItems)
Run Code Online (Sandbox Code Playgroud)

您将使用Quantity和OrderNumber属性遇到同样的问题.

  • 谢谢.我必须执行以下AutoMapper.Mapper.CreateMap <Order,DTOOrder>().ForMember(dto => dto.DTOOrderItems,opt => opt.MapFrom(src => src.OrderItems)); (6认同)