ASP.NET Core中使用AutoMapper实现自动转化

一:介绍

AutoMapper的功能就是实现映射一个对象到另一个对象的自动化工具,最常见的就是DTO (Data Transfer Object)与MO(ModelObject)之间的转换。

现在有两个类,实体类Blogs和BlogsView之间的转化

[Table("Blog")]
    public class Blog: BaseEntity
    {
        [Key]
        public int Id { get; set; }
        public string Title { get; set; }
        public string Link { get; set; }
        public DateTime? Date { get; set; }
        public string Author { get; set; }
        public string Tag { get; set; }
    }
public class BlogView
    {
        public int Id { get; set; }
        public string TitleName { get; set; }
        public string Link { get; set; }
        public DateTime? Date { get; set; }
        public string Author { get; set; }
        public string Tag { get; set; }
    }

二:使用

(1)  安装AutoMapper

右键项目打开NuGet程序管理包,安装AutoMapper和AutoMapper.Extensions.Microsoft.DependencyInjection

AutoMapper.Extensions.Microsoft.DependencyInjection,这个是用来配合依赖注入的,

在项目当中,都使用依赖注入,尽量不要用new 来实例化,导致层耦合

(2) 添加映射文件

在安装项目中新建Automapper文件夹,然后创建AutomapperConfig.cs文件继承自Profile类,用来配置所有的映射关系。

public class AutomapperConfig : Profile
    {
        public AutomapperConfig()
        {
            CreateMap<Blog, BlogView>().ForMember(e => e.TitleName, v => v.MapFrom(a => a.Title));
        }
    }

这里的 Profile有什么用呢,是 services.AddAutoMapper他会自动找到所有继承了Profile的类然后进行配置。我这个类是放在Service层的

使用AutoMapper实现模型映射,并注入

那此时Startup类里面的配置就可以写成 services.AddAutoMapper(Assembly.Load("Service"));它会自动加载Service的程序集并从这里面找到继承了profile类的配置实现。

(3) 使用mapper

 /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="blogData"></param>
        public BlogService(IBlogData blogData, IMapper mapper)
        {
            _blogData = blogData;
            _mapper = mapper;
        }
 BlogView model = new BlogView();
 _mapper.Map(blog, model);

这时就会把Blog属性值映射到BlogView实体中了

当两个实体类属性不同时可以通过配置的方式进行映射

CreateMap<Blog, BlogView>().ForMember(e => e.TitleName, v => v.MapFrom(a => a.Title))

当不想对某个属性进行映射我们可以忽略

.ForMember(e => e.Author, v => v.Ignore());

猜你喜欢

转载自www.cnblogs.com/ZhengHengWU/p/12794455.html