我的DTO(目标)具有许多布尔值.
例如:
HasThisOption
HasThatOption
HasSomeOtherOption
通过在模型对象(源)的一个字段上进行一些计算来填充这些值.这种计算有点昂贵,所以我不想对DTO上的每个字段都进行相同的计算,而是只运行一次计算.
一个简单的解决方案是只从我的控制器调用一个函数.即:.PopulateFields(source,dest)
但是我不想在我的映射器配置中为每个目标字段调用“忽略” ..因为它们大约有40个……而且看起来很凌乱,这样做确实没有任何意义.
在这种情况下通常会做什么?
解决方法:
在定义源类型和目标类型之间的映射时,可以使用AfterMap:
Mapper.CreateMap<Source, Dest>().AfterMap((source, dest) =>
{
// do your custom computations and assignments here
});
如果源类型中不存在布尔字段,则在标准映射过程中无论如何它们都将被忽略,并且它们的默认值在目标中. AfterMap方法允许您更改它们.