2009-04-09 19 views
4

一部のオブジェクトを自動マッピングしようとしています。
ソースオブジェクトは、名前の前に_、デスティネーションオブジェクトを持つプロパティを持ちます。 1つのマップ作成を実装することは可能ですか?オートマはすべての_propertiesをすべてのソースタイプのプロパティ
にマップします。AutoMapperの問題

class MyMapper<TFrom, TTo>{ 
    TTo PerformMap(TFrom fromObject){ 
     Mapper.CreateMap<From, To>(); // ??? 
     TTo result = Mapper.Map<From, To>(fromObject); 
     //result.Id.ShouldBe(value from TFrom._Id); 
     return result; 
    } 
} 

class From 
{ 
    public int _Id { get; set; } 
    public string _Name { get; set; } 
} 

class To 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

答えて

8

何かがあなたを助けるかもしれない - カスタム命名規則を。トランク(R107)をチェックアウトする場合は、INamingConventionを調べてください。今、私は2つの命名規則(PascalCaseとlower_case_underscore)を持っていますが、それは本当にあなたが軌道に乗るために右の正規表現を考え出すの問題だ:

INamingConvention.cs

を今、命名規則は、グローバルとプロフィール - ですスコープ。この機能は新機能なので、テスト以外のドキュメントはありません。

+0

私は現時点でAMを使用していませんが、この機能について知っておいてよかったです。 :) –

+1

この回答のリンクは404を提供します、あなたは更新できますか?すごい仕事ジミーのおかげで! – shanabus

+1

リンクが無効です。 – gdoron

0

は、このためには、この特定のケースを解決するためのカスタムマッピングを追加することができます。私はAutoMapperに最近追加された

Mapper.CreateMap<From, To>() 
    .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src._Id)) 
    .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src._Name)); 
+0

をやっている方法ですが、...私はそれがより一般的になりたかったです。 - automapperと同様に、これらの2つのオブジェクトをマップし、prop名の下線を無視します(名前の最初のシンボル)。さもなければ - 私はすべてのオブジェクトのペアに注意を払う必要があります。 –

1

これは私が必要とする効果That`sそれを

Mapper.Initialize(cfg => 
     { 
      cfg.RecognizeDestinationPrefixes(new []{"_"}); 
      cfg.RecognizePrefixes(new[] { "_" }); 

      cfg.CreateMap<To, From>().ReverseMap(); 
     }); 
関連する問題