netcore 2.2 使用 AutoMapper 实现实体之间映射
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了netcore 2.2 使用 AutoMapper 实现实体之间映射,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4214字,纯文字阅读大概需要7分钟。
内容图文
![netcore 2.2 使用 AutoMapper 实现实体之间映射](/upload/InfoBanner/zyjiaocheng/1221/f59a62cdfd434499863f62dce7b280db.jpg)
一、什么是AutoMapper?
AutoMapper是一个简单的对象映射框架(OOM),将一个对象映射到另一个对象。
二、AutoMapper的好处
以前的时候我们将DTO对象转换为Model对象时,我们必须将每一个属性都手动映射
实体类
/// <summary> /// 用户表 /// </summary> [Table("tb_User")] publicclass TbUser { ///<summary>/// 用户Id ///</summary> [Key] [Column("userId")] [StringLength(32)] publicstring UserId { get; set; } ///<summary>/// 用户名 ///</summary> [Column("userName")] [StringLength(20)] publicstring UserName { get; set; } ///<summary>/// 邮箱 ///</summary> [Column("email")] [StringLength(30)] publicstring Email { get; set; } ///<summary>/// 添加时间 ///</summary> [Column("addTime")] [Required] public DateTime AddTime { set; get; } }
DTO传输对象
/// <summary> /// 用户传输对象 /// </summary> public class UserDto { /// <summary> /// 用户Id /// </summary> [StringLength(32, ErrorMessage = "{0}最多{1}个字符"), Display(Name = "用户Id")] publicstring UserId { get; set; } ///<summary>/// 用户名 ///</summary> [StringLength(20, ErrorMessage = "{0}最多{1}个字符"), Display(Name = "用户名")] publicstring UserName { get; set; } ///<summary>/// 邮箱 ///</summary> [StringLength(30, ErrorMessage = "{0}最多{1}个字符"), Display(Name = "邮箱")] publicstring Email { get; set; } }
业务层
/// <summary> /// 业务处理 /// </summary> public class UserService : IUserService { private readonly MyDbContext _dbContext; /// <summary> /// 构造函数 /// </summary> /// <param name="dbContext"></param> public UserService(MyDbContext dbContext) { _dbContext = dbContext; } ///<summary>/// 添加用户 ///</summary>///<param name="dto">实体传输对象</param>///<returns></returns>publicint 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(); } ///<summary>/// 编辑用户信息 ///</summary>///<param name="dto">实体传输对象</param>///<returns></returns>publicint Update(UserDto dto) { var user = _dbContext.TbUsers.Find(dto.UserId); if(user==null) thrownew 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<UserDto, TbUser>(); } }
注入服务
// 注入AutoMapper服务,Mappings就是自己创建的映射类 services.AddAutoMapper(typeof(Mappings));
修改业务层代码
/// <summary> /// 业务处理 /// </summary> public class UserService : IUserService { private readonly MyDbContext _dbContext; /// <summary> /// 注入接口 /// </summary> private readonly IMapper _mapper; /// <summary> /// 构造函数 /// </summary> /// <param name="dbContext"></param> /// <param name="mapper"></param> public UserService(MyDbContext dbContext,IMapper mapper) { _dbContext = dbContext; _mapper = mapper; } ///<summary>/// 添加用户 ///</summary>///<param name="dto">实体传输对象</param>///<returns></returns>publicint Add(UserDto dto) { var info = _mapper.Map<UserDto, TbUser>(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(); } ///<summary>/// 编辑用户信息 ///</summary>///<param name="dto">实体传输对象</param>///<returns></returns>publicint Update(UserDto dto) { var user = _dbContext.TbUsers.Find(dto.UserId); if(user==null) thrownew Exception("获取用户信息失败"); //user.UserName = dto.UserName; //user.Email = dto.Email; _mapper.Map(dto, user); return _dbContext.SaveChanges(); } }
运行测试
PS:一般在使用AutoMapper转换时dto中字段名称要跟实体对象定义一样才能转换成功。
原文:https://www.cnblogs.com/tenghao510/p/11975789.html
内容总结
以上是互联网集市为您收集整理的netcore 2.2 使用 AutoMapper 实现实体之间映射全部内容,希望文章能够帮你解决netcore 2.2 使用 AutoMapper 实现实体之间映射所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。