2013-06-07 11 views
6

で私は私が各ドメインモデルのリストにこれをマッピングしたいこのAutomapper - 同時に

public class OrderViewModel 
{ 
    public string Name{get;set;} 
    public string ContactDetails {get;set;} 
    public List<FunkyThing_ViewModel> {get;set;} 
} 

public class FunkyThing_ViewModel 
{ 
    public string ThingName{get;set;} 
    public string Colour{get;set;} 
    public string Size{get;set;} 
} 

ようになり、クライアントから受け取ったビューモデルを持っているリストを平らにこれは、より多くの次のようになります。

public class Order 
{ 
    public string Name{get;set;} 
    public string ContactDetails {get;set;} 
    public string ThingName{get;set;} 
    public string Colour{get;set;} 
    public string Size{get;set;} 
} 

は、だから私がdoたいと、このようなもので終わるよ:

List<Order> orders = new Orders(); 
Mapper.CreateMap<OrderViewModel, List<Order>>(); 
//Something in here to ensure each funky thing creates an additional order.... 

Mapper.Map(viewModel, orders); 
+0

'Order'クラスがメンバのパブリックセッターを持っていないときにどのように達成できるのかよく分かりません... –

+0

そこには謝罪がありますが間違いはありません。 –

+0

... AutoMapperはプライベートメンバーも処理できることを指摘していますが、Mapper.Initialize(cfg => { cfg.BindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; cfg.CreateMap <送信元、宛先>(); }); ' –

答えて

9
using System.Collections.Generic; 
using System.Linq; 
using AutoMapper; 
using NUnit.Framework; 
using SharpTestsEx; 

namespace StackOverflowExample.Automapper 
{ 
    public class OrderViewModel 
    { 
     public string Name { get; set; } 
     public string ContactDetails { get; set; } 
     public List<FunkyThingViewModel> FunkyThingViewModels { get; set; } 
    } 

    public class FunkyThingViewModel 
    { 
     public string ThingName { get; set; } 
     public string Colour { get; set; } 
     public string Size { get; set; } 
    } 

    public class Order 
    { 
     public string Name { get; set; } 
     public string ContactDetails { get; set; } 
     public string ThingName { get; set; } 
     public string Colour { get; set; } 
     public string Size { get; set; } 
    } 

    [TestFixture] 
    public class FlattenWithListTests 
    { 
     [Test] 
     public void FlattenListTest() 
     { 
      //arrange 
      var source = new OrderViewModel 
       { 
        Name = "name", 
        ContactDetails = "contact", 
        FunkyThingViewModels = new List<FunkyThingViewModel> 
         { 
          new FunkyThingViewModel {Colour = "red"}, 
          new FunkyThingViewModel {Colour = "blue"} 
         } 
       }; 

      Mapper.CreateMap<FunkyThingViewModel, Order>(); 
      Mapper.CreateMap<OrderViewModel, Order>(); 
      Mapper.CreateMap<OrderViewModel, List<Order>>() 
        .ConvertUsing(om => om.FunkyThingViewModels.Select(
         ftvm => 
          { 
           var order = Mapper.Map<Order>(om); 
           Mapper.Map(ftvm, order); 
           return order; 
          }).ToList()); 

      //act 
      var mapped = Mapper.Map<List<Order>>(source); 

      //assert 
      mapped[0].Satisfy(m => 
           m.Name == source.Name && 
           m.ContactDetails == source.ContactDetails && 
           m.Colour == "red"); 
      mapped[1].Satisfy(m => 
           m.Name == source.Name && 
           m.ContactDetails == source.ContactDetails && 
           m.Colour == "blue"); 
     } 
    } 
} 
+0

私は決してそこにいるだろう!優秀 - ありがとうございました! –

+0

どうやってこのようなことを考え出すことができますか? :) – user20358

+0

プロファイル基本クラスを使ってどのようにこれを行いますか? – user20358