我有一个案例,我需要映射这样的事情:
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根据Event.EventType
更改子类型映射中的行为?
PS&GT;我知道这是糟糕的设计,它真的应该通过重构整个事情来解决(例如删除EventType和创建子类) 不幸的是,我继承了这段代码,只需要花费很多时间来解决bug。
答案 0 :(得分: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;
}
});