1

次のようなものをマップする必要がある場合があります。

public class Event
{
    string Name {get;set;}
    int EventType {get;set;}
    SubType Sub {get;set;}
}

問題は、内部の SubType をマップする方法がクラスのEventTypeプロパティによって決定されることです。Eventさまざまな種類のイベントに対して、さまざまなものをマッピングしたいと考えています。

通常の方法は、イベントとサブタイプの両方のマップを作成することです - それらは互いに関連していません:

 map.CreateMap<EventDTO, Event>();
 map.CreateMap<SubTypeDTO, SubType>();

に基づいて SubType マッピングの動作を変更するよう automapper に指示するにはどうすればよいEvent.EventTypeですか?

PS> これは悪い設計であり、全体をリファクタリングして解決する必要があることはわかっています (例: EventType を削除してサブクラスを作成する) 残念ながら、このコードを継承したので、時間をかけずにバグを解決する必要があります。

4

1 に答える 1

2

これを達成する何かがあるかどうかはわかりませんが、次のことができます。

 Mapper.CreateMap<EventDTO, Event>()
            .ForMember(to => to.Name, from => from.Ignore() )
            .ForMember(to => to.Sub, from => from.Ignore() )
            .ForMember(to => to.EventType, from => from.Ignore() )
            .AfterMap((source, dest) =>
                          {
                              switch (dest.EventType)
                              {
                                  case 1:
                                      // Behaviour EventType 1
                                      ...
                                      dest.Name = source.NameDTO + "1";
                                      ...
                                      break;
                                  case 2:
                                      // Behaviour EventType 2
                                      ...
                                      dest.Name = source.NameDTO + "2";
                                      ...
                                      break;
                                  default:
                                      // Behaviour EventType 3
                                      ...
                                      dest.Name = source.NameDTO + "0";
                                      ...
                                      break;
                              }
                          });
于 2013-02-01T18:10:21.077 に答える