C# 地图列表<&燃气轮机;和Automapper?

C# 地图列表<&燃气轮机;和Automapper?,c#,.net-3.5,automapper,C#,.net 3.5,Automapper,我有两门课: 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;} } 公共类CustomerDTO

我有两门课:

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;}
}
公共类CustomerDTO
{
公共字符串名称{get;set;}
公共列表顺序{get;set;}
}
公共类OrderDTO
{
公共字符串名称{get;set;}
公共字符串说明{get;set;}
公共十进制成本{get;set;}
}
我正在使用AutoMapper for.NET 3.5,目前正在我的应用程序启动中执行以下操作:

Mapper.CreateMap<Customer, CustomerDTO>();
Mapper.CreateMap<Order,OrderDTO>();
Mapper.CreateMap();
CreateMap();
这是一个简化的示例,因为我将DTO属性命名为不同于实体属性,所以我使用了FormMember,但我不清楚如何将订单映射到客户:

我试过:

Mapper.CreateMap<Customer, CustomerDTO()
.ForMember(dest => dest.Orders, opt=> opt.MapFrom(src=>src.Orders));
Mapper.CreateMap dest.Orders,opt=>opt.MapFrom(src=>src.Orders));
但它找不到
src.Orders


如果我确实需要两个
CreateMap
语句,那么
AutoMapper
是否会“自动”将对象
Customer
链接到
订单

是,您需要告诉AutoMapper每个映射。它不会帮你猜的。因此,如果一个
OrderDTO
应该映射到一个
订单
,您必须告诉AutoMapper。如果需要,还必须指定反向关系(即,
Order
应映射到
OrderDTO

换句话说,对于双向映射,您需要:

Mapper.CreateMap<Order, OrderDTO>();
Mapper.CreateMap<OrderDTO, Order>();
Mapper.CreateMap();
CreateMap();

Customer
而言,如果
Customer
CustomerDTO
都有一个名为
Orders
的属性,则无需执行任何其他操作。只要您告诉AutoMapper在
Order
OrderDTO
Customer
CustomerDTO
之间映射,当您在发布的代码中映射
Customer
时,它将自动映射您的
订单
,CustomerDTO具有
orders
属性,而不是
orders
属性。那只是发帖中的一个输入错误吗?如果它是发布的,那么这将是一个问题,属性名称区分大小写。另外,如果映射是1对1,那么您可以只执行
Mapper.map(cust,custDTO)
代码是否也应该是
ListMOrdersDTO>Orders{get;set}?你能发布你的
Ordem
Custumer
课程吗?也许订单属性的类型不同。@JustinPihony-这是让我困惑的部分。我理解cust到CustDTO的映射,但是如何将OrdersDTO映射到CustDTO呢?你能用.ReverseMap()实现吗,@Chris PrattNice。实际上我不知道
ReverseMap
。AutoMapper很棒,但是文档还有很多需要改进的地方。不过,请记住,
reverseemap
仅适用于上述简单映射。如果您需要使用
MapFrom
等工具进行自定义操作,那么您必须在每个方向进行细分。