Asp.Net 6.0 集成 AutoMapper 初入

AutoMapper

在后端开发中,对外接口时通常使用的实体是DTO,用于数据传输使用。在DTO到数据访问层的时候,需要进行DTO实体到DAO实体类的转换。这时,我们使用AutoMapper可以简化这个转换对象的过程。

依赖

NuGet中搜搜AutoMapper进行安装即可

配置

创建Profile,配置实体映射关系

MapperConfigurationExpression 继承自 Profile

cs 复制代码
public class AutoMapperProFile:MapperConfigurationExpression
    {

        public AutoMapperProFile()
        {
            // 增加实体间的转换
            CreateMap<ToDo, ToDoDto>().ReverseMap();
            CreateMap<Memo, MemoDto>().ReverseMap();
            CreateMap<User, UserDto>().ReverseMap();
            
            /**
             *  使用 ForMember 对映射规则做进一步的加工,可以使用自定义转换器
            CreateMap<PostModel, PostViewModel>()
            .ForMember(destination => destination.CommentCounts, source => source.MapFrom(i => i.Comments.Count()));
            **/


        }
    }

配置到Asp.Net IOC中

cs 复制代码
#region 注册AutoMapper
var autoMapperConfiguration = new MapperConfiguration(config =>
{
    config.AddProfile(new AutoMapperProFile());
});

builder.Services.AddSingleton(autoMapperConfiguration.CreateMapper());
#endregion

使用

cs 复制代码
public class ToDoService : IToDoService
    {

        public IUnitOfWork Uow { get; }
        public ILogger<ToDoService> Logger { get; }
        public IMapper Mapper { get; }

        public ToDoService(IUnitOfWork uow, ILogger<ToDoService> logger,IMapper mapper)
        {
            Uow = uow;
            Logger = logger;
            Mapper = mapper;
        }
		
		public async Task<ApiResponse> AddAsync(ToDoDto model)
        {
            try
            {
                // AutoMapper 转换
                // var items = Mapper.Map<IList<ToDoDto>>(toDos.Items);
                var Todo = Mapper.Map<ToDo>(model);
                IRepository<ToDo> repository = Uow.GetRepository<ToDo>();
                await repository.InsertAsync(Todo);
                if (await Uow.SaveChangesAsync() > 0)
                {
                    return new ApiResponse(true, Todo);
                }
                return new ApiResponse("添加数据失败");
            }
            catch (Exception ex)
            {
                return new ApiResponse(ex.Message);
            }


        }
}
相关推荐
szephyr13 小时前
消息队列入门:RabbitMQ 和 Kafka 到底怎么选,什么时候不该用
后端·架构·kafka·消息队列·rabbitmq
上进小菜猪21 小时前
把 KES 集群交给 Kubernetes 的九十天:一个 DBA 的试用实录
后端
两点王爷1 天前
PostgreSQL 常用 SQL 语句与 GIS 相关函数详解
数据库·后端
考虑考虑1 天前
Springboot环境变量占位符语法
spring boot·后端·spring
曹牧1 天前
C#:24小时制时间
c#
步行cgn1 天前
Spring 基于 XML 的自动装配:byName 详解
java·后端·spring
RISCV_Explorer1 天前
RISC-V启动与运行时规范机制解析——BRS约定、HSM多核启动与设备树要求
后端·risc-v
星栈独行1 天前
ADK-Rust 是什么?Rust 生态新一代 AI Agent 开发套件
人工智能·后端·rust
JavaGuide1 天前
对标 MinIO!全新一代分布式文件系统正式发布
前端·后端
用户8356290780511 天前
使用 Python 将 DOCX 转换为 Markdown
后端·python