ASP.NET Core Web API 中使用 AutoMapper时 分别对 提交/获取数据做实体映射
在项目中为了更便捷的去实现 数据库持久化对象(数据库对应的实体) 与 视图对象(传递给页面显示时使用) 间的实体映射。
参考的文章中,只提到一种配置映射的方式。例如:
1 public class RoleProfile : Profile { 2 public RoleProfile() { 3 CreateMap<RoleViewModel, Role>(); //dto to entity 4 } 5 }
说明:Role和RoleViewModel即上文提到的 数据库持久化对象 与 视图对象
从映射源和目标可以看出,这是从dto(或者视图对象)中映射到数据库持久化对象。即 提交,更新资源时使用(HttpPost HttpPut),
当需要获取资源时,需要配置另一个映射:就是从数据库持久化对象中映射到dto(或者视图对象)例如:
1 public class RoleProfile : Profile { 2 public RoleProfile() { 3 //entity to dto 4 CreateMap<Role, RoleViewModel>(); 5 } 6 }
一个完整的映射配置如下:
1 public class BloodPressureProfile : Profile { 2 public BloodPressureProfile() { 3 4 //for entity in(post put) 5 CreateMap<BloodPressureViewModel, BloodPressure>() 6 .ForMember(dest => dest.BP_Id, t => t.MapFrom(f => f.id)) 7 .ForMember(dest => dest.BP_Cus_Id, t => t.MapFrom(f => f.cus_id)) 8 .ForMember(dest => dest.BP_MaxPressure, t => t.MapFrom(f => f.maxpressure)) 9 .ForMember(dest => dest.BP_MinPressure, t => t.MapFrom(f => f.minpressure)) 10 .ForMember(dest => dest.BP_Pulse, t => t.MapFrom(f => f.pulse)) 11 .ForMember(dest => dest.BP_EquCode, t => t.MapFrom(f => f.equcode)) 12 ; 13 //for entity out (get) 14 CreateMap<BloodPressure, BloodPressureViewModel>().BeforeMap((source, dto) => 15 { 16 dto.time = Convert.ToDateTime(source.F_CreatorTime).ToString("yyyy-MM-dd"); 17 }) 18 .ForMember(dest => dest.id, t => t.MapFrom(f => f.BP_Id)) 19 .ForMember(dest => dest.cus_id, t => t.MapFrom(f => f.BP_Cus_Id)) 20 .ForMember(dest => dest.maxpressure, t => t.MapFrom(f => f.BP_MaxPressure)) 21 .ForMember(dest => dest.minpressure, t => t.MapFrom(f => f.BP_MinPressure)) 22 .ForMember(dest => dest.pulse, t => t.MapFrom(f => f.BP_Pulse)) 23 .ForMember(dest => dest.equcode, t => t.MapFrom(f => f.BP_EquCode)) 24 .ForMember(dest => dest.time, t => t.MapFrom(f => f.F_CreatorTime)) 25 ;//end 26 }//end ctor 27 }
最后:从代码中也可以看出:
1 public async Task<ExecuteResult<RoleViewModel>> Get(long id) { 2 var result = new ExecuteResult<RoleViewModel>(); 3 var data = await _unitOfWork.GetRepository<Role>().GetFirstOrDefaultAsync 4 (predicate: c => c.Id == id); 5 var returnData = _mapper.Map<RoleViewModel>(data);//泛型类型代表的是 想要的 目标类型 6 result.SetData(returnData); 7 return result; 8 } 9 10 public async Task<ExecuteResult> Update(RoleViewModel viewModel) { 11 ExecuteResult result = new ExecuteResult(); 12 13 if (viewModel.CheckField(ExecuteType.Update, _unitOfWork) is ExecuteResult checkResult && !checkResult.IsSucceed) { 14 return checkResult; 15 } 16 var entity = _mapper.Map<Role>(viewModel); 17 18 var row = await _unitOfWork.GetRepository<Role>().FindAsync(viewModel.Id); 19 row.Name = viewModel.Name; 20 row.DisplayName = viewModel.DisplayName; 21 row.Remark = viewModel.Remark; 22 row.Modifier = 1219490056771866624; 23 row.ModifyTime = DateTime.Now; 24 _unitOfWork.GetRepository<Role>().Update(row); 25 await _unitOfWork.SaveChangesAsync();//提交 26 return result; 27 }
看红色部分代码,完,哈哈哈哈

浙公网安备 33010602011771号