c# - 如何使用 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?
解决方案
您需要设置 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"
}
推荐阅读
- python - 如何删除屏幕上的所有文本 - Python
- scala - 如何将 scala-spark 的日志记录级别更改到 IDE 的控制台?
- facebook - Messenger bot:在您登录 www.facebook.com 并按照给出的说明操作之前,您无法访问该应用程序。没有给出任何指示
- excel - 为什么我的 schema.ini 文件不强制 Excel 将物化路径读取为文本,而不是日期?
- c - 使用 get_string CS50 时不断出错
- python - 通过熊猫数据框循环更新每行的多列
- mysql - 如何将列名更改为行值
- java - DynamoDB 到 Elasticsearch 与 AWS SDK v2?
- bash - 在基于 Ubuntu 的 Linux Mint 20 上编译 Github 软件 (Eddypro) 后出现 Command Not Found 错误
- python - 如何从其他目录导入本地模块