AutoMapper介绍与使用

AutoMapper 介绍

官方文档链接

  • AutoMapper是支持对象映射的一款开源工具,主要负责将一个数据对象的数据映射到另一个模型上,常用于业务层ViewModel与数据层的数据Entity进行交互的。
  • 在这里插入图片描述

为什么需要使用AutoMapper

  • 如上文提到的,automapper解决了模型与模型间的转换问题。相信编码的时候会经常遇到过下面这种情况
	public class Student
    {
        /// <summary>
        /// 姓名
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 性别
        /// </summary>
        public string Sex { get; set; }
    }
    
	public class People
    {
        /// <summary>
        /// 姓名
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 性别
        /// </summary>
        public string Sex { get; set; }
    }

	public void Test()
        {
            // 定义一个人
            People people = new People();
            // 赋予人信息
            people.Name = "这是我的名字";
            people.Sex = "这是我的性别";

            // 将People类型强装成为Student类型
            // 在这里编译会报错
            Student student = (Student)people;
        }

明明是两个拥有相同属性的模型却无法相互转换

如何开始

  1. 安装AutoMapper
Install-Package AutoMapper
Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection
  1. 创建映射关系类
// 继承AutoMapper的Profile基类
public class Mapper: Profile
    {
        public Mapper()
        {
        	// 创建将People转换为Student类的Map
            CreateMap<People, Student>();
        }
    }
  1. 在startup里注入AutoMapper
            services.AddAutoMapper(AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName("程序集名称")));

在需要使用的地方注入AutoMapper

        // automapper实例对象
        private readonly IMapper _mapper;

        public ValuesController(IMapper mapper) {
            _mapper = mapper;
        }

在这里插入图片描述
可以看到,已经转换成功
同样也能用于集合的转换
在这里插入图片描述

更好的使用

  • AutoMapper的默认map映射只会映射两个模型间属性名一致的,映射属性名不一样的情况时需要在创建map映射关系时使用ForMember方法进行指定
    public class Mapper: Profile
    {
        public Mapper()
        {
            CreateMap<People, Student>()
                .ForMember(a => a.B,b=>b.MapFrom(c=>c.A)) ; // 指定将People类中的A映射到Student中的B
        }
    }

在这里插入图片描述
可以看到执行结果已经成功将People类中的A映射到Student类中的B了

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值