automapper自动创建映射_.net core 2.2 运用 AutoMapper 实现实体之间映射,很方便

一、什么是AutoMapper?

AutoMapper是一个简单的对象映射框架(OOM),将一个对象映射到另一个对象。

二、AutoMapper的好处

以前的时候我们将DTO对象转换为Model对象时,我们必须将每一个属性都手动映射

实体类

    ///     /// 用户表    ///     [Table("tb_User")]    public class TbUser    {        ///         /// 用户Id        ///         [Key]        [Column("userId")]        [StringLength(32)]        public string UserId { get; set; }        ///         /// 用户名        ///         [Column("userName")]        [StringLength(20)]        public string UserName { get; set; }        ///         /// 邮箱        ///         [Column("email")]        [StringLength(30)]        public string Email { get; set; }        ///         /// 添加时间        ///         [Column("addTime")]        [Required]        public DateTime AddTime { set; get; }    }

DTO传输对象

    ///     /// 用户传输对象    ///     public class UserDto    {         ///         /// 用户Id        ///         [StringLength(32, ErrorMessage = "{0}最多{1}个字符"), Display(Name = "用户Id")]        public string UserId { get; set; }        ///         /// 用户名        ///         [StringLength(20, ErrorMessage = "{0}最多{1}个字符"), Display(Name = "用户名")]        public string UserName { get; set; }        ///         /// 邮箱        ///         [StringLength(30, ErrorMessage = "{0}最多{1}个字符"), Display(Name = "邮箱")]        public string Email { get; set; }    }

业务层

    ///     /// 业务处理    ///     public class UserService : IUserService    {        private readonly MyDbContext _dbContext;        ///         /// 构造函数        ///         ///         public UserService(MyDbContext dbContext)        {            _dbContext = dbContext;        }        ///         /// 添加用户        ///         /// 实体传输对象        ///         public int Add(UserDto dto)        {            var user = new TbUser            {                UserId = Guid.NewGuid().ToString("N"),                Email = dto.Email,                UserName = dto.UserName,                AddTime = DateTime.Now            };            _dbContext.Add(user);            return _dbContext.SaveChanges();        }        ///         /// 编辑用户信息        ///         /// 实体传输对象        ///         public int Update(UserDto dto)        {            var user = _dbContext.TbUsers.Find(dto.UserId);            if(user==null) throw new Exception("获取用户信息失败");            user.UserName = dto.UserName;            user.Email = dto.Email;            return _dbContext.SaveChanges();        }    }

这样情况还可以,属性不是很多,如果属性过多(几十,几百),还需要手动赋值,简直太头疼了,还会导致大量的时间浪费在对象转换中,用AutoMapper,只需要简单的配置就可以完成两个对象之间的属性映射,开发中省去了属性转换的时间,从而提高工作效率。

三、使用AutoMapper

安装引用

通过程序包管理器控制台安装AutoMapper

Install-Package AutoMapper -version 9.0.0

Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection -version 7.0.0

配置映射关系

创建一个类并继承autoMapper的Profile类

    public class Mappings : Profile    {        public Mappings()        {            CreateMap();        }    }

注入服务

            //注入AutoMapper服务,Mappings就是自己创建的映射类            services.AddAutoMapper(typeof(Mappings));

修改业务层代码

    ///     /// 业务处理    ///     public class UserService : IUserService    {        private readonly MyDbContext _dbContext;        ///         /// 注入接口        ///         private readonly IMapper _mapper;        ///         /// 构造函数        ///         ///         ///         public UserService(MyDbContext dbContext,IMapper mapper)        {            _dbContext = dbContext;            _mapper = mapper;        }        ///         /// 添加用户        ///         /// 实体传输对象        ///         public int Add(UserDto dto)        {            var info = _mapper.Map(dto);            info.AddTime=DateTime.Now;            info.UserId = Guid.NewGuid().ToString("N");            //var user = new TbUser            //{            //    UserId = Guid.NewGuid().ToString("N"),            //    Email = dto.Email,            //    UserName = dto.UserName,            //    AddTime = DateTime.Now            //};            _dbContext.Add(info);            return _dbContext.SaveChanges();        }        ///         /// 编辑用户信息        ///         /// 实体传输对象        ///         public int Update(UserDto dto)        {            var user = _dbContext.TbUsers.Find(dto.UserId);            if(user==null) throw new Exception("获取用户信息失败");            //user.UserName = dto.UserName;            //user.Email = dto.Email;            _mapper.Map(dto, user);            return _dbContext.SaveChanges();        }    }

运行测试

c92ef948ba50f6611308bc3d314768a3.png

PS:一般在使用AutoMapper转换时dto中字段名称要跟实体对象定义一样才能转换成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值