AutoMapper库的使用
2019-06-21 本文已影响0人
Memoyu
概述
AutoMapper简单的说就是一个对象与对象之间的映射工具,通过它,我们可以将类型A映射到类型B(很多场景下是Model —ViewModel两个DTO类型的映射(DTO(Data Transfer Object)就是数据传输对象,里边装的是数据属性之类的)
)。
例如:我们这里有三个类,
//Author类,存储姓名信息
public class Author
{
public string Name { get; set; }
}
//Book类,存储书本名称,作家信息
public class Book
{
public string Title { get; set; }
public Author Author { get; set; }
}
//界面要展示的书本信息则为书本名Title与作家Author
public class BookViewModel
{
public string Title { get; set; }
public string Author { get; set; }
}
在以前,我们需要这样赋值:
BookViewModel model = new BookViewModel
{
Title = book.Title,
Author = book.Author.Name
}
数据量少的时候,它并没有什么问题,如果,给上百个属性赋值时,这将是很繁琐枯燥的一个事情。
AutoMapper用法
而AutoMapper正是解决了这些问题。
我们只需要导入Nuget包,然后引入命名空间
AutoMapper.Mapper.CreateMap<Book, BookViewModel>();
var model = AutoMapper.Mapper.Map<BookViewModel>(book);
不过,上述还是有个问题并没有得到很好的解决,这也是在AutoMapper文档上缺失的,为把Book.Athor.Name字段赋值给BookViewModel.Author字段,需要在每一处需要执行映射的代码地方,同时创建一个如下的显示转换申明代码,所以如果有很多处转换的话,那么我们就会写很多重复的这几行代码:
AutoMapper.Mapper.CreateMap<Book, BookViewModel>()
.ForMember(dest => dest.Author , opts => opts.MapFrom(src => src.Author.Name));