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
等工具进行自定义操作,那么您必须在每个方向进行细分。