1

我有一个案例,我需要映射这样的东西:

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

问题是SubType里面应该映射的方式是由类的EventType属性决定的Event。对于不同类型的事件,我希望映射不同的事物。

通常的方法是为 Event 和 SubType 创建映射 - 它们彼此不相关:

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

如何告诉 automapper 更改基于的 SubType 映射中的行为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 回答