zoukankan      html  css  js  c++  java
  • 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();

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

  • 相关阅读:
    erlang 大神
    Mysql5.7全新的root密码规则
    单机多实例
    mysql 5.7源码安装
    MySQL审计功能
    MySQL升5.6引发的问题
    一千行MySQL学习笔记
    MySQL5.6新特性之GTID、多线程复制
    正确修改MySQL最大连接数的三种好用方案
    MYSQL 慢日志
  • 原文地址:https://www.cnblogs.com/jf-ace/p/15530132.html
Copyright © 2011-2022 走看看