AspNetCore中AutoMapper映射对象使用技巧(二)

继上一篇:AutoMapper自动映射框架的使用(一) - 点终将连成线 - 博客园 (cnblogs.com)

假如现在有两个一样的对象,一个从数据库查出来,一个是你自己添加的,需求是融合这两个对象,为空的则不映射,实现的流程如下:

      自己添加               数据库                 结果

 

这个对象的属性如果很少则可以手动映射,如果有10个,50个,100个呢,这个时候就需要借助映射工具了;

注意:AutoMapper中Map()方法不能够映射自己,所以你可以把一样的对象命名成两个类其中属性一模一样,一个作为源,一个作为对象;

首先去数据库查询:

var taskFormRepo = await GetTaskByAsync(newSpider);

映射:这里传进来的对象为taskItemParameters

var taskResult = _mapper.Map(taskItemParameters, taskFormRepo);//(输入数据,需要更新的数据)

因为两个对象之间的属性相同,所以映射的时候会将null覆盖原有的值,即:上图的结果变为:size:null   color:Red

为了使他们隐射时不覆盖空的,可以在自定义的Profile文件中自定义映射条件:

CreateMap<TaskItemParameters, TaskItem>().ForAllMembers(opts =>opts.Condition((src,dest,srcMember)=>srcMember!=null));//<源对象,目标对象>

这里只是定义这两个映射对像不为空,好像有全局定义的方法,后面研究出来怎么用再更新;

最后如果想把映射结果保存回数据库中,仅需:

await _appDbContext.SaveChangesAsync();

这个过程中判断具体的属性值一点没有用到,相比起手动映射效率还是相当可以的;

 

posted @ 2021-11-09 17:40  点终将连成线  阅读(137)  评论(0编辑  收藏  举报