我有两个班级:
public class CustomerDTO
{
public string Name {get;set;}
public List<Order> Orders {get;set;}
}
public class OrderDTO
{
public string Name {get;set;}
public string Description {get;set;}
public decimal Cost{get;set;}
}
我正在使用AutoMapper for .NET 3.5,目前在我的Application_StartUp中执行以下操作:
Mapper.CreateMap<Customer, CustomerDTO>();
Mapper.CreateMap<Order,OrderDTO>();
这是一个简化的例子,因为我将DTO属性命名为与我的实体属性不同,所以我使用了ForMember,但我不清楚如何将订单映射到客户:
我试过了:
Mapper.CreateMap<Customer, CustomerDTO()
.ForMember(dest => dest.Orders, opt=> opt.MapFrom(src=>src.Orders));
但找不到src.Orders
。
如果我确实需要同时拥有CreateMap
个语句,那么AutoMapper
会“自动”将对象Customer
链接到Orders
吗?
答案 0 :(得分:0)
是的,您需要告诉AutoMapper每个映射。它不会猜你。因此,如果OrderDTO
应映射到Order
,则必须告诉AutoMapper。如果需要,您还必须指定反向关系(即Order
应映射到OrderDTO
)。
换句话说,对于双向映射,您需要:
Mapper.CreateMap<Order, OrderDTO>();
Mapper.CreateMap<OrderDTO, Order>();
就Customer
而言,如果Customer
和CustomerDTO
都有名为Orders
的属性,则您无需执行任何其他操作。只要您告诉AutoMapper在Order
和OrderDTO
以及Customer
和CustomerDTO
之间进行映射,它就会在您映射{Order
时自动映射Customer
1}}。