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;
}
明明是两个拥有相同属性的模型却无法相互转换
如何开始
- 安装AutoMapper
Install-Package AutoMapper
Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection
- 创建映射关系类
// 继承AutoMapper的Profile基类
public class Mapper: Profile
{
public Mapper()
{
// 创建将People转换为Student类的Map
CreateMap<People, Student>();
}
}
- 在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了