继上一篇: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();
这个过程中判断具体的属性值一点没有用到,相比起手动映射效率还是相当可以的;