AutoMapper多个源映射到一个Dto

AutoMapper多个源映射到一个Dto

首先要引入AutoMapper(我电脑用的8.0,9.0版本)

1. 定义源映射对象

Model如下:

实体Social
    /// <summary>
    /// 社会属性
    /// </summary>
    public class Social
    {
        public int Age { get; set; }
        public bool IsMarried { get; set; }
        public string Name { get; set; }
    }
实体Physical
    /// <summary>
    /// 身体属性
    /// </summary>
    public class Physical
    {
        public string Eye { get; set; }
        public string Mouth { get; set; }
    }
PeopleDto
    public class PeopleDto
    {
        public string Eye { get; set; }
        public string Mouth { get; set; }
        public string Ear { get; set; }
        public int Age { get; set; }
        public bool IsMarried { get; set; }
    }

2. 映射配置

    public class AutoMapperProfile : Profile
    {
        /// <summary>
        /// 构造函数
        /// </summary>
        public AutoMapperProfile()
        {

            CreateMap<SocialAttribute, PeopleDto>()
                  .ForMember(m => m.Age, n => n.MapFrom(s => s.Age))
                  .ForMember(m => m.IsMarried, n => n.MapFrom(s => s.IsMarried));
            CreateMap<PhysicalAttribute, PeopleDto>()
              .ForMember(m => m.Eye, n => n.MapFrom(s => s.Eye))
              .ForMember(m => m.Mouth, n => n.MapFrom(s => s.Mouth));
        }
    }

3. 控制台的原生注入

    static void Main(string[] args)
    {
        AutoMapper.IConfigurationProvider config = new MapperConfiguration(cfg =>
        {
            cfg.AddProfile<AutoMapperProfile>();
        });
        //DI容器
        var root = new ServiceCollection()
            .AddSingleton(config)
              .AddSingleton<IMapper, Mapper>()
              .BuildServiceProvider();
        //容器1
        var provider1 = root.CreateScope().ServiceProvider;
        var serviceMapper = provider1.GetService<IMapper>();
        //PeopleDto result = new PeopleDto() { Eye = "双眼皮", Mouth = "红润", Age = 18, IsMarried = false };目标
        Physical physical = new Physical() { Eye = "很大很好看", Mouth = "法国兰蔻" };
        Social social = new Social() { Name = "测试name", IsMarried = true, Age = 18 };
        PeopleDto peopleDto = new PeopleDto();
        PeopleDto output = serviceMapper.Map(social, serviceMapper.Map(physical, peopleDto));
        Console.WriteLine("Hello World!");
    }

按照这个就可以运行测试 ;目前就不截图了,还在研究怎么保存图片

运行有问题的,可以留言

原文地址:https://www.cnblogs.com/YikaJIA/p/11782911.html

时间: 2024-11-09 10:40:27

AutoMapper多个源映射到一个Dto的相关文章

源映射(Source Map)详解

一.什么是源映射 为了提高性能,很多站点都会先压缩 JavaScript 代码然后上线, 但如果代码运行时出现错误,浏览器只会显示在已压缩的代码中的位置,很难确定真正的源码错误位置. 这时源映射就登场了. 源映射(Source Map)是一种数据格式,它存储了源代码和生成代码之间的位置映射关系. 源映射一般使用 .map 扩展名,源映射本质是一个 JSON 文本文档,其 MIME 类型也一般设为 application/json. 二.如何使用源映射 在 JavaScript 代码中添加注释:

AutoMapper指定列名进行映射

有了AutoMapper,就再也不用进行手工一对一的从IDataReader到实体字段的赋值.这篇博文是一个实际案例的记录. 实体类型定义如下: public class UploadImage { public int Id { get; set; } public string Src { get; set; } } Src属性在数据库中对应的字段名为ImageUrl. 映射要求:从IDataReader到IEnumerable<UploadImage>,代码如下: using (var

storm源码之一个class解决nimbus单点问题【转】

[原]storm源码之一个class解决nimbus单点问题 一.storm nimbus 单节点问题概述 1.storm集群在生产环境部署之后,通常会是如下的结构:                                         从图中可以看出zookeeper和supervisor都是多节点,任意1个zookeeper节点宕机或supervisor节点宕机均不会对系统整体运行造成影响,但nimbus和ui都是单节点.ui的单节点对系统的稳定运行没有影响,仅提供storm-ui

AutoMapper搬运工之自定义映射

回顾 上节说到了AutoMapper的简单使用,对于复杂的Mapping需要强大的自定义,这节我们来看下AutoMapper的自定义Mapping(Projection) 搬运自Git:https://github.com/AutoMapper/AutoMapper/wiki/Projection 实例 本篇的场景是一个简单的日历事件,我们首先定义一个日历的事件如下: 1 public class CalendarEvent 2 { 3 //事件日期 4 public DateTime Date

.Net Core使用AutoMapper做对象关系映射

我想很多后端开发者,纠结于如何在Dto及表实体中做属性关系映射,因为真的太繁琐了., ⒈如何使用? 1 Mapper.Initialize(cfg => cfg.CreateMap<UsersInputDto, Users>()); 2 UsersInputDto input = new UsersInputDto() 3 { 4 id = 1, firstname = "fan", lastname = "qi", uname = "f

AutoMapper 创建嵌套对象映射(原创)

之前在做DTO转换时,用到AutoMapper.但DTO的层次太深了,无奈官方没针对嵌套类型提供好的解决方案,于是自己实现了一下: 思路:采用递归和反射很好的避免手工创建嵌套对象的映射. 第一个版本,已经提交到:https://github.com/AutoMapper/AutoMapper/wiki/Nested-mappings 1 /// <summary> 2 /// 递归创建类型间的映射关系 (Recursively create mappings between types) 3

遭遇AutoMapper性能问题:映射200条数据比100条慢了近千倍

今天遇到了AutoMapper的一个性能问题,使用的是AutoMapper的Project特性,AutoMapper版本是3.3.0,代码如下: return await _repository .GetByStartId(startIngId, itemCount) .Project() .To<TDto>() .ToListAsync(); 当获取包含200条数据的列表时,竟然超过5秒. GetDocs(3000, 200) 6304ms GetDocs(3000, 200) 5822ms

html 图像映射(一个图像多个连接)

以前就见过那种导航地图,点击地图的不同省份分别跳到不同的连接,现在用html实现一下,简单的. 图像映射是指一个图像可以建立多个连接,就是在图像上面定义多个区域,每个区域连接到不同的地址. 效果如图:(可以直接分别点击四个人物头像试试!) 点击索隆,跳到索隆. 点击索隆,跳到索隆. 1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/lo

从源码剖析一个Spark WordCount Job执行的全过程

原文地址:http://mzorro.me/post/55c85d06e40daa9d022f3cbd WordCount可以说是分布式数据处理框架的”Hello World”,我们可以以它为例来剖析一个Spark Job的执行全过程. 我们要执行的代码为: sc.textFile("hdfs://...").flatMap(_.split(" ")).map((_, 1)).reduceByKey(_+_).collect 只有一行,很简单也很经典的代码.这里的c