我正在尝试使用我的DTO对象映射嵌套列表,但它不起作用。这是我试过的。一切都返回null。我得到的错误是: AutoMapper.dll中发生了'AutoMapper.AutoMapperMappingException'类型的异常,但未在用户代码中处理
public class ordersview_Dto
{
public int orderID { get; set; }
public string orderNumber { get; set; }
public float? orderTotal { get; set; }
public string lastName { get; set; }
public string firstName { get; set; }
public List<ProductsDTO> ProductsDTO { get; set; }
}
public class ProductsDTO
{
public int id { get; set; }
public int OrderID { get; set; }
}
这就是我的映射方式:
Mapper.CreateMap<OrderHeader, ordersview_Dto>()
.ForMember(h => h.ProductsDTO, k => k.MapFrom((m => m.orderLines)));
IEnumerable<OrderHeader> ordersList = new OrdersRepository().getOrders();
IEnumerable<ordersview_Dto> ordersFlow = Mapper.Map<IEnumerable<OrderHeader>, IEnumerable<ordersview_Dto>>(ordersList);
我确信问题依赖于这一行: .ForMember(h =&gt; h.ProductsDTO,k =&gt; k.MapFrom((m =&gt; m.orderLines))); ProductsDTO和OrderLines都是列表。
这是我的OrderHeader类:
public class OrderHeader
{
public OrderHeader()
{
// Set any defaults here;
orderLines = new List<OrderLines>();
}
public float? SubTotal { get; set; }
public float? Shipping { get; set; }
public string ShipMethod { get; set; }
public float? Tax { get; set; }
public int SalesID { get; set; }
public string IpAddress { get; set; }
// Mapping
public Customer customer;
public OrderCC ordercc;
public OrderAddress orderAddress;
public List<OrderLines> orderLines;
}
答案 0 :(得分:1)
您的AutoMapper地图声明是正确的。
您可以在映射前验证ordersList.orderLines
是否为null
或为空吗?
您的OrdersRepository
可能没有以您认为的方式提供或填充ordersList
。
IEnumerable<OrderHeader> ordersList = new OrdersRepository().getOrders();
// Check value of ordersList.orderLines.Count here
// (assuming orderLines is an IEnumerable<T>
<强>更新强>
在验证orderLines
不为空后,可能会将ProductsDTO
声明更改为:
public IEnumerable<ProductsDTO> ProductsDTO { get; set; }
没有理由将其指定为List<>
。您可能会遇到类型不匹配异常,因为您无法将orderLines
转换为List<>
更新2
您正尝试将IEnumerable<OrderLines>
映射到IEnumerable<ProductsDTO>
,这些不是一致类型。你有这张地图吗?
你也需要这样的东西:
Mapper.CreateMap<OrderLine, ProductsDTO>().forMember(...
答案 1 :(得分:1)
您还需要创建一个映射来处理orderLines
集合包含的任何类,ProductDTO
。 AutoMapper不知道如何处理这些,所以忽略它们。