2011-02-01 11 views
1

私はこれに似た、ネストされたビューモデルを持っている:Automapperはネストされたモデルからフラットなモデルへのどのように機能しますか?

public class EmployeeViewModel 
{  
    //... 

    public string EmployeeFirstName { get; set; } 

    public string EmployeeLastName { get; set; } 

    public AddressViewModel{ get; set; } 
} 

AddressViewModelは次のようになります。

public class Employee 
{ 
    public string EmployeeFirstName { get; set; } 

    public string EmployeeLastName { get; set; } 

    public string Street { get; set; } 

    public string City { get; set; } 

    public string State { get; set; } 

    public string Zip { get; set; } 
} 

I:

public class AddressViewModel 
{ 
    public string Street {get; set;} 
    public string City {get; set;} 
    public string State {get; set;} 
    public string Zip {get; set;} 
} 

次に、そのような従業員のドメインオブジェクトがありますEmployeeViewModelをEmployeeドメインオブジェクトにマップしようとしています。これは私が思い付いたものです、それは動作しますが、これを行うための簡単な方法がある場合、私は思っていた:

Mapper.CreateMap<EmployeeViewModel, Employee>().ForMember(destination => destination.Street, opt => opt.MapFrom(src => src.AddressViewModel.Street)) 
      .ForMember(destination => destination.City, opt => opt.MapFrom(src => src.AddressViewModel.City)) 
      .ForMember(destination => destination.State, opt => opt.MapFrom(src => src.AddressViewModel.State)) 
      .ForMember(destination => destination.Zip, opt => opt.MapFrom(src => src.AddressViewModel.Zip)); 

あなたが見ることができるように、従業員のドメインオブジェクトとAddressViewModelでプロパティ名があります同じ。だから、これを行う簡単な方法があるように思えます。

おかげ

答えて

2

あなたは、ドキュメントのflattening sampleをチェックアウトすることがあります。そして、ここでの例です:

public class AddressViewModel 
{ 
    public string Street { get; set; } 
} 

public class EmployeeViewModel 
{  
    public string EmployeeFirstName { get; set; } 
    public AddressViewModel Address { get; set; } 
} 

public class Employee 
{ 
    public string EmployeeFirstName { get; set; } 
    public string AddressStreet { get; set; } 
} 


class Program 
{ 
    static void Main() 
    { 
     Mapper.CreateMap<EmployeeViewModel, Employee>(); 
     var result = Mapper.Map<EmployeeViewModel, Employee>(new EmployeeViewModel 
     { 
      EmployeeFirstName = "first name", 
      Address = new AddressViewModel 
      { 
       Street = "some street" 
      } 
     }); 
     Console.WriteLine(result.EmployeeFirstName); 
     Console.WriteLine(result.AddressStreet); 
    } 
} 

お知らせ方法については、targetプロパティはAddressStreetと呼ばれる箱から出して動作するように平坦化。

+0

これは答えとしてマークする必要があります。ぴったり。私はそれがどのように働いているのか分かりませんでしたし、私も同じような問題を解決しました。 – julealgon

関連する問題