AutoMapper入门

对象映射工具(AutoMapper)入门

 简介

AutoMapper让我轻松的在两个模型之间做映射,这种框架称之为:对象映射工具。

   [官方网站]https://github.com/AutoMapper/AutoMapper/wiki

使用方法

第一步:安装

 Install-Package AutoMapper

 第二步:配置映射

一般我们会在映射的目标方静态构造方法或单独的命名空间下配置映射。

> User.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WHTR.Demos.AutoMapper.Domain
    {
        public sealed class User
        {
            public string Name { get; set; }
    
            public string Address { get; set; }
    
            public DateTime Birthday { get; set; }
        }
    }

 

> UserModel.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    using AutoMapper;
    
    using WHTR.Demos.AutoMapper.Domain;
    
    namespace WHTR.Demos.AutoMapper.Models
    {
        public sealed class UserModel
        {
            static UserModel()
            {
                var map = Mapper
                             .CreateMap<User, UserModel>()                             // 默认自动映射所有命名一致的属性。
                             .ForMember(x => x.Addr, y => y.MapFrom(z => z.Address));  // 显式映射不同名字。
    
                map.BeforeMap((user, UserModel) =>
                {
                    Console.WriteLine("做一些预处理");
                });
    
                map.AfterMap((user, UserModel) =>
                {
                    Console.WriteLine("做一些后续处理");
                });
            }
    
            public static UserModel Create(User user)
            {
                return Mapper.Map<User, UserModel>(user);
            }
    
            public string Name { get; set; }
    
            public string Addr { get; set; }
    
            public string Birthday { get; set; }
    
            public override string ToString()
            {
                return string.Format("name:{0},addr:{1},birthday:{2}", this.Name, this.Addr, this.Birthday);
            }
        }
    }

第三步:调用

> Program.cs

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    using WHTR.Demos.AutoMapper.Domain;
    using WHTR.Demos.AutoMapper.Models;
    
    namespace WHTR.Demos.AutoMapper
    {
        class Program
        {
            static void Main(string[] args)
            {
                var userModel = UserModel.Create(new User
                {
                    Name = "XXX",
                    Address = "YYY",
                    Birthday = new DateTime(1985, 09, 10)
                });
    
                Console.WriteLine(userModel);
            }
        }
    }

备注

如果你发现哪里写起来不爽或出现了重复,AutoMapper一般都提供了适当的机制来方便扩展。

posted on 2014-10-31 16:35  淡笑岁月痕  阅读(278)  评论(0)    收藏  举报

导航