有没有办法为 Automapper 动态创建多个地图?
Is there a way to dyanmically create multiple maps for Automapper?
有没有办法动态生成多张地图?例如,我可以映射到一组源值和目标值吗?我正在使用遗留数据库,其中一个表有超过 350 列。手动映射每个字段非常容易出错且劳动强度大。
//HOW CAN BELOW INCLUDE OVER 350+ MAPPED FIELDS DYNAMICALLY FROM AN ARRAY?
CreateMap<Employee, EditEmployeeModel>()
.ForMember(dest => dest.ConfirmEmail,
opt => opt.MapFrom(src => src.Email));
基本上,如果 属性 名称相似,则您不必手动将源映射到目标。 Automapper 会自动执行此操作。因此,如果您保持 属性 名称相似,则无需映射。
但如果这不可能,并且必须保留不同的名称,那么您可以使用 Automapper 的 .AfterMap() 功能。它比源目标映射更简单。
public class EditEmployeeMap : IMappingAction<Employee, EditEmployeeModel>
{
public void Process(Employee source, EditEmployeeModel destination, ResolutionContext context)
{
destination.ConfirmEmail = source.Email;
}
}
然后,
CreateMap<Employee, EditEmployeeModel>().AfterMap<EditEmployeeMap>();
虽然上述解决方案的目的不是针对此用例,但这可以使您的工作更加简单。
但我建议保持 属性 名称相似,这样可以省去很多麻烦。
有没有办法动态生成多张地图?例如,我可以映射到一组源值和目标值吗?我正在使用遗留数据库,其中一个表有超过 350 列。手动映射每个字段非常容易出错且劳动强度大。
//HOW CAN BELOW INCLUDE OVER 350+ MAPPED FIELDS DYNAMICALLY FROM AN ARRAY?
CreateMap<Employee, EditEmployeeModel>()
.ForMember(dest => dest.ConfirmEmail,
opt => opt.MapFrom(src => src.Email));
基本上,如果 属性 名称相似,则您不必手动将源映射到目标。 Automapper 会自动执行此操作。因此,如果您保持 属性 名称相似,则无需映射。
但如果这不可能,并且必须保留不同的名称,那么您可以使用 Automapper 的 .AfterMap() 功能。它比源目标映射更简单。
public class EditEmployeeMap : IMappingAction<Employee, EditEmployeeModel>
{
public void Process(Employee source, EditEmployeeModel destination, ResolutionContext context)
{
destination.ConfirmEmail = source.Email;
}
}
然后,
CreateMap<Employee, EditEmployeeModel>().AfterMap<EditEmployeeMap>();
虽然上述解决方案的目的不是针对此用例,但这可以使您的工作更加简单。
但我建议保持 属性 名称相似,这样可以省去很多麻烦。