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);
            }


        }
}
相关推荐
uzong19 小时前
Mermaid: AI 时代画图的魔法工具
后端·架构
q***697719 小时前
Spring Boot与MyBatis
spring boot·后端·mybatis
Eiceblue20 小时前
通过 C# 将 HTML 转换为 RTF 富文本格式
开发语言·c#·html
IUGEI21 小时前
synchronized的工作机制是怎样的?深入解析synchronized底层原理
java·开发语言·后端·c#
间彧21 小时前
GraalVM Native Image:跨平台能力与编译模式深度解析
后端
间彧21 小时前
GraalVM Native Image 与传统 JVM 内存管理:云原生时代的技术选型指南
后端
r***123821 小时前
SpringBoot最佳实践之 - 使用AOP记录操作日志
java·spring boot·后端
b***748821 小时前
前端GraphQL案例
前端·后端·graphql
LSL666_1 天前
SpringBoot自动配置类
java·spring boot·后端·自动配置类
q***78371 天前
Spring Boot 3.X:Unable to connect to Redis错误记录
spring boot·redis·后端