【问题标题】:Map List<> with Automapper?使用 Automapper 映射列表<>?
【发布时间】:2013-05-09 00:53:19
【问题描述】:

我有两个班级:

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

【问题讨论】:

  • 在您发布的代码中,CustomerDTO 具有 orders 而不是 Orders 属性。这只是帖子中的错字吗?如果它是发布的,那将是一个问题,属性名称区分大小写。
  • 另外,如果您的地图是 1 比 1,那么您可以这样做 Mapper.Map(cust, custDTO)
  • 代码不应该也是ListMOrdersDTO&gt; Orders {get;set};??
  • 您能发布您的OrdemCustumer 课程吗?可能 Orders 属性的类型不一样。
  • @JustinPihony - 这对我来说是令人困惑的部分。我了解将 cust 映射到 CustDTO,但是如何将 OrdersDTO 映射到 CustDTO?

标签: c# .net-3.5 automapper


【解决方案1】:

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

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

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

Customer 而言,如果CustomerCustomerDTO 都有一个名为Orders 的属性,则您无需执行任何其他操作。只要您告诉 AutoMapper 在OrderOrderDTOCustomerCustomerDTO 之间进行映射,它就会在您映射Order 时自动映射您的Order

【讨论】:

  • 你可以使用 .ReverseMap() 吗,@Chris Pratt
  • 不错。我实际上不知道ReverseMap。 AutoMapper 很棒,但是文档还有很多不足之处。不过,请记住 ReverseMap 仅适用于上述简单映射。如果您需要使用MapFrom 等进行自定义操作,那么您将不得不打破每个方向。
猜你喜欢
  • 2011-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-16
相关资源
最近更新 更多