我在ASP.NET MVC应用程序中使用AutoMapper 6.0来实现实体和视图模型之间的映射。实体使用 byte [8] Version 属性,但视图模型使用 ulong Version 属性。由于不同的属性类型,默认映射忽略该字段,我最终得到视图模型的默认值(即0)。
目前我在每个_mapper.Map(entity,viewModel)之后调用下面的代码;
_mapper.Map(entity,viewModel);
viewModel.Version = System.BitConverter.ToUInt64(entity.Version.ToArray(), 0);
如何在初始化期间配置AutoMapper,以便不需要第二行?
我有数百个模型,所以我没有使用ForMember(cfg)配置创建自定义地图,而是想修改AutoMapper约定,因此默认情况下每个地图都会发生上述转换类型,例如:
public class MyCustomProfile : AutoMapper.Profile
{
public MyCustomProfile()
{
CreateMissingTypeMaps = true;
//use custom converter for this convetion: ulong vVersion = BitConverter.ToUInt64(eVersion.ToArray(), 0);
}
}
答案 0 :(得分:2)
您可以尝试使用ConvertUsing进行类型映射:
CreateMap<byte, ulong>().ConvertUsing(System.Convert.ToUInt64);
按要求编辑:
CreateMap<byte[], ulong>().ConvertUsing(x=> BitConverter.ToUInt64(x, 0));