2013-02-08 12 views
97

私はAutomapperフレームワークの初心者です。プロパティの名前が異なる場合にマッピングルールを指定する方法

public class Employee 
{ 
    public long Id {get;set;} 
    public string Name {get;set;} 
    public string Phone {get;set;} 
    public string Fax {get;set;} 
    public DateTime DateOfBirth {get;set;} 
} 

public class EmployeeDto 
{ 
    public long Id {get;set;} 
    public string FullName {get;set;} 
    public DateTime DateOfBirth {get;set;} 
} 

注:プロパティの名前クラスはEmployeeDtoクラスの「フルネーム」プロパティと同じではありませんEmployeeの「名」を次のように私は、ドメインクラスとDTOのクラスを持っています。

そしてここEmployeeDtoEmployeeオブジェクトをマッピングするためのコードです:

Mapper.CreateMap<Employee, EmployeeDto>(); // code line (***) 
EmployeeDto dto = Mapper.Map<Employee, EmployeeDto>(employee); 

私の質問です:私はEmployeeDtoEmployee(ソース・クラス)をマッピングしたい場合は(先クラス)、どのように私はマッピングを指定することができますルール?言い換えれば、上記のコード行(***)を使ってもっとどうすればいいですか?

答えて

200

気にしないで、私自身は解決策が見つかりました:

Mapper.CreateMap<Employee, EmployeeDto>() 
    .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name)); 
+1

は、任意のクラスに対してグローバルプレフィックス/サフィックスの事のようなものを、それを指定する方法はありますか?たとえば、 "Localizations"というプロパティを持つライブラリをたくさん用意しています。そして、私はそれらを対応するプロパティが "LocalizedName"と呼ばれるクラスにマップしたいと思います。私の唯一のオプションはForMemberを各マッピング設定に追加することですか? – NickAb

+2

MapperクラスにCreateMapメソッドがありません:( –

+1

@ Navid_pdp11あります。静的クラスMapperをインスタンスではありません。 –