C# 自动映射:从单个源值填充多个目标值

C# 自动映射:从单个源值填充多个目标值,c#,asp.net-mvc,entity-framework,automapper,C#,Asp.net Mvc,Entity Framework,Automapper,我的DTO(目的地)有一组布尔值 例如: HasThisOption HasThatOption HasSomeOtherOption 这些值是通过对模型对象(源)的一个字段进行计算来填充的。这种计算有点昂贵,因此我不想对DTO上的每个字段都进行相同的计算,我只想运行一次计算 简单的解决方案是从我的控制器调用一个函数。。即。。PopulateFields(源、目标) 但我不想在映射器配置中忽略每个目标字段的调用。。因为大约有40个。。。它看起来很混乱,这样做真的毫无意义 在这种情况下,人们通常

我的DTO(目的地)有一组布尔值

例如:

HasThisOption
HasThatOption
HasSomeOtherOption
这些值是通过对模型对象(源)的一个字段进行计算来填充的。这种计算有点昂贵,因此我不想对DTO上的每个字段都进行相同的计算,我只想运行一次计算

简单的解决方案是从我的控制器调用一个函数。。即。。PopulateFields(源、目标)

但我不想在映射器配置中忽略每个目标字段的调用。。因为大约有40个。。。它看起来很混乱,这样做真的毫无意义


在这种情况下,人们通常会做什么?

在定义源类型和目标类型之间的映射时,可以使用
AfterMap

Mapper.CreateMap<Source, Dest>().AfterMap((source, dest) =>
{
    // do your custom computations and assignments here
});
Mapper.CreateMap().AfterMap((源,目标)=>
{
//在这里进行自定义计算和作业
});

如果布尔字段在源类型中不存在,则在标准映射期间,它们将被忽略,并在目标中具有默认值。
AfterMap
方法允许您更改它们。

它们将被忽略,但Mapper.assertconfigurationsvalid()将引发异常。但我不知道AfterMap的事。。