首页 > 解决方案 > 如何使用 AutoMapper 将对象中的对象的信息映射到另一个对象

问题描述

假设我的 ASP.Net core 5 项目中有 3 个对象类。我正在使用包 AutoMapper.Extensions.Microsoft.DependencyInjection。这些课程是:

public class Order 
{
    public int OrderId {get; set;}
    public double OrderPrice{ get; set; }
    public int CustomerId { get; set; }
    public virtual Customer Customer { get; set; }
}

public class Customer 
{
    public int CustomerId { get; set; }
    public string CustomerName{ get; set; }
}

public class OrderODTO 
{
    public int OrderId {get; set;}
    public double OrderPrice{ get; set; }
    public string CustomerName{ get; set; }
}

现在,当我在 Order 和 OrderODTO 之间使用 Automapper 时,OrderId 和 OrderPrice 值将被映射,但是即使对象 customer 包含在 order 对象中,CustomerName 也始终为 null。例如

order 
{
    orderId: 1,
    orderPrice: 3.99,
    customerId: 2,
    customer {
        customerId: 2,
        customerName: "Jack"
   }
}

那么如何使用 Automapper 从订单和客户对象映射到 1 个对象 orderODTO?

标签: c#asp.netasp.net-coreautomapper

解决方案


您需要设置 Order 和 OrderODTO 之间的映射:

var config = new MapperConfiguration(cfg => cfg.CreateMap<Order, OrderODTO>()
            .ForMember("CustomerName", opt => opt.MapFrom(src => src.Customer.CustomerName)));

使用基于此配置的映射器,您将获得所需的结果

var mapper = new Mapper(config);
        Order order = new Order()
        {
            OrderId = 1,
            OrderPrice = 3.99,
            CustomerId = 2,
            Customer = new Customer() {
                CustomerId = 2,
                CustomerName = "Jack"
            }
        };
OrderODTO orderOdto = mapper.Map<Order, OrderODTO>(order);

因此:

orderOdto 
{
    OrderId: 1,
    OrderPrice: 3.99,
    CustomerName: "Jack"
}

推荐阅读