2012-10-23 15 views
5

シンプルな親子シナリオを作成し、Automapperを使ってマッピングできないようにしました。次のシナリオでは、私はOrderItemsのリストがdtoOrderItemsのリストにマップされることを期待していますが、自動的には発生しません。 forループなどで手動で記述する必要はありますか?Automapperを使用して親子コレクションモデルをマップする方法は?

public class Order 
{ 
    public int OrderNumber {get; set;} 
    public List<OrderItem> OrderItems { get; set; } 

    public Order() 
    { 
     OrderItems = new List<OrderItem>(); 
     OrderItems.Add(new OrderItem() {Quantity= 10}); 
    } 
} 

public class OrderItem 
{ 
    public int Quantity {get; set;} 
} 

public class DTOOrder 
{ 
    public int DTOOrderNumber { get; set; } 
    public List<DTOOrderItem> DTOOrderItems { get; set; } 

    public DTOOrder() 
    { 
     DTOOrderItems = new List<DTOOrderItem>();   
    } 
} 

public class DTOOrderItem 
{ 
    public int DTOQuantity { get; set; } 
} 


public DTOOrder TestConversion() 
{ 
    AutoMapper.Mapper.CreateMap<OrderItem, DTOOrderItem>(); 
    AutoMapper.Mapper.CreateMap<Order, DTOOrder>(); 

    Order order = new Order();     
    var dtoOrder = AutoMapper.Mapper.Map<Order, DTOOrder>(order);   
    return dtoOrder; 
} 

答えて

4

コレクションがマップされない理由は、1つのコレクション名がOrderItemsで、もう1つがDTOOrderItemsです。 Automapperは名前でプロパティをマップし(Case sensitive)、これを解決できません。
は、この問題を解決するには、次の
1)のOrderItems
または
2)AutomapperのAPIからForMemberメソッドを使用して、このプロパティの上書きマッピングに)あなたのDTOクラスで(DTOOrderItemsの名前を変更します。このような何か:

AutoMapper.Mapper.CreateMap<Order, DTOOrder>() 
    .ForMember(o => o.OrderItems, dto => dto.DTOOrderItems) 

同じ問題あなたは数量と注文番号のプロパティを持っています。

+4

ありがとうございました。私は次のAutoMapper.Mapper.CreateMap ()を実行する必要がありました。ForMember(dto => dto.DTOOrderItems、opt => opt.MapFrom(src => src.OrderItems)); – user1767363

0

拡張メソッドで記述することができます。すべてのページをループする代わりに、1つのページに残り、コードを重複させずに再利用することができます。

public static List<testMOdel> ToModelList(this List<testEntity> objlist) 
     { 
      List<testMOdel> list = new List<testMOdel>(); 
      foreach (var item in objlist) 
      { 
       list.Add((Mapper.Map<testEntity, testMOdel>(item))); 
      } 
      return list; 
     } 
     public static List<testEntity> ToEntityList(this List<testMOdel> modellist) 
     { 
      List<testEntity> list = new List<testEntity>(); 
      foreach (var item in modellist) 
      { 
       list.Add((Mapper.Map<testMOdel, testEntity>(item))); 
      } 
      return list; 
     } 
関連する問題