【个人博客搭建】(21)使用AutoMap对象映射

在.NET WebAPI项目中,使用AutoMap进行对象映射是一种高效的数据处理方式。通过自动映射机制,可以极大地简化对象之间的转换过程,提高代码的可维护性和整洁性。下面将详细探讨如何在.NET WebAPI中使用AutoMap进行对象映射:

  1. 安装和配置
    • 安装AutoMapper包:需要通过NuGet包管理器安装AutoMapper及其相关依赖包。这包括AutoMapperAutoMapper.Extensions.Microsoft.DependencyInjection,后者支持依赖注入功能。
    • 配置服务:在Startup类的ConfigureServices方法中添加AutoMapper服务。使用services.AddAutoMapper(Assembly.GetAssembly(typeof(Startup)))注册AutoMapper,并指定包含映射配置文件的程序集。
  2. 创建映射规则
    • 定义映射配置文件:创建继承自Profile的配置文件类,如AutoMapperConfigs,在该类中定义具体的映射规则。例如,使用CreateMap<DBPoundSheet, PoundSheetViewModel>()CreateMap<PoundSheetViewModel, DBPoundSheet>()来创建双向映射。
    • 配置复杂映射:对于具有不同字段名称或需要进行特殊处理的映射,可以使用ForMember方法指定字段的映射规则。例如,从动态JSON数据映射到模型时,可以使用JToken类结合LINQ查询式来实现复杂的映射逻辑。
  3. 实现映射操作
    • 注入IMapper依赖:在需要执行映射操作的服务或控制器中,通过构造函数注入IMapper接口实例。确保在类的开始部分声明私有只读的IMapper字段,以供类的其他方法使用。
    • 执行映射操作:使用IMapper实例的Map方法来执行实际的对象映射。例如,将PoundSheetViewModel对象转换为DBPoundSheet对象,可以使用_mapper.Map<DBPoundSheet>(model)来实现单个对象的转换。对于集合对象的转换,同样适用此方法。
  4. 优化和维护
    • 更新映射配置:随着项目的发展,可能需要修改或增加新的映射规则。这时只需更新或扩展已有的映射配置文件,无需手动修改多处代码,大大简化了维护工作。
    • 性能考虑:虽然AutoMapper提供了便利的配置和使用方式,但在某些高性能要求的场景下,仍需注意映射操作的性能影响,避免不必要的复杂映射或频繁的映射操作。

总之,通过上述步骤,可以有效地在.NET WebAPI项目中利用AutoMap进行对象映射,从而提高开发效率和项目的可维护性。

1、新建映射文件类:AutoMapperSetting,继承Profile


    public class AutoMapperSetting : Profile
    {
        //调用CreateMap<A, B>()时,
        //A代表源对象类型,而B代表目标对象类型。
        //这意味着属性和值将从A复制到B。

        //可添加相反的关系,

        public AutoMapperSetting()
        {


            #region 【组织架构】SysOrganization

            //CreateMap<SysOrgPageDto, SysOrganization>();
            CreateMap<SysOrganization, SysOrgPageDto>();


            //CreateMap<SysOrganization, AddOrgParameters>();
            CreateMap<AddOrgParameters, SysOrganization>();

            //CreateMap<SysOrganization, UpdateOrgParameters>();
            CreateMap<UpdateOrgParameters, SysOrganization>();

            CreateMap<SysOrganization, UI_TreeSelectDto>()
                .ForMember(dest => dest.Value, opt => opt.MapFrom(src => src.Id))
                .ForMember(dest => dest.Label, opt => opt.MapFrom(src => src.Name));

            #endregion

            #region 【系统菜单】SysMenu

            CreateMap<SysMenu, SysMenuPageDto>();
            CreateMap<AddSysMenuParameters, SysMenu>();
            CreateMap<UpdateSysMenuParameters, SysMenu>();
            CreateMap<SysMenu, UI_TreeSelectDto>()
                .ForMember(dest => dest.Value, opt => opt.MapFrom(src => src.Id))
                .ForMember(dest => dest.Label, opt => opt.MapFrom(src => src.Name));

            CreateMap<SysMenu, SysMenuRouterDto>();



            #endregion

            #region 【角色】SysRole

            CreateMap<AddSysRoleParameters, SysRole>();
            CreateMap<UpdateSysRoleParameters, SysRole>();

            #endregion

            #region 【自定义配置】CustomConfig

            CreateMap<AddCustomConfigParameters, CustomConfig>();
            CreateMap<UpdateCustomConfigParameters, CustomConfig>();

            #endregion

            #region 【相册】Albums

            CreateMap<AddAlbumsParameters, Albums>();
            CreateMap<UpdateAlbumsParameters, Albums>();

            #endregion

            #region 【照片】Pictures

            CreateMap<AddPicturesParameters, Pictures>();

            #endregion

            #region 【标签】Tags

            CreateMap<AddTagsParameters, Tags>();
            CreateMap<UpdateTagsParameters, Tags>();

            #endregion

            #region 【栏目】Categories

            CreateMap<AddCategoriesParameters, Categories>();
            CreateMap<UpdateCategoriesParameters, Categories>();

            CreateMap<Categories, CategoriesPageDto>();


            #endregion

            #region 【标签】Tags

            CreateMap<AddTalksParameters, Talks>();
            CreateMap<UpdateTalksParameters, Talks>();

            #endregion

            #region 【友情链接】Tags

            CreateMap<AddFriendLinkParameters, FriendLink>();
            CreateMap<UpdateFriendLinkParameters, FriendLink>();

            #endregion

            #region 【文章】Article

            CreateMap<AddArticleParameters, Article>();
            CreateMap<UpdateArticleParameters, Article>();

            #endregion

            #region 【评论/留言】Comments

            CreateMap<AddCommentsParameters, Comments>();

            #endregion
        }
    }

        在案例中,就可以对字段名相同的值进行映射了,

        同时也可以对不同名称的字段名称进行指定的映射。

2、添加注入

#region AutoMapper 映射

builder.Services.AddAutoMapper(typeof(AutoMapperSetting));

#endregion

 3、使用:

        3.1、构造函数引入

        private readonly Repository<SysOrganization> _orgRep;
        private readonly IHttpContextUser _user;
        private readonly IMapper _mapper;

        public SysOrganizationService(Repository<SysOrganization> orgRep, IHttpContextUser user, IMapper mapper)
        {
            _orgRep = orgRep;
            _user = user;
            _mapper = mapper;
        }

         3.2、映射:这里以新增为例。

 /// <summary>
 /// 添加组织机构
 /// </summary>
 /// <param name="dto"></param>
 /// <returns></returns>
 public async Task<ApiResult> AddOrg(AddOrgParameters para)
 {
     var orgEntity = _mapper.Map<SysOrganization>(para);
     orgEntity.CreatedTime = DateTime.Now;
     orgEntity.CreatedUserId = _user.userId;

     var bl = await _orgRep.InsertAsync(orgEntity);
     if (!bl)
     {
         return ApiResultHelper.Error();
     }
     return ApiResultHelper.Success();
 }

4、其他:

        以上就是简单的应用了。

        另外,也有其他的映射工具nuget包可以达到我们的要求,例如:Mapster、

5、todo

        另外今天也是2024高考的第一天,也祝广大学子高考加油!顺利!考出好成绩!

        (他们应该要4个月之后才可能看到到吧?~ 超小声疑问)

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.NET 中,可以使用AutoMapper库来实现automap映射两个list。具体实现如下: 首先,需要安装AutoMapper库,可以使用以下NuGet命令安装: ``` Install-Package AutoMapper ``` 然后,创建一个映射配置类,用于指定list1和list2的映射关系。例如: ```csharp public class MappingProfile : Profile { public MappingProfile() { CreateMap<int, string>(); } } ``` 接着,在程序中使用以下代码进行映射: ```csharp var config = new MapperConfiguration(cfg => cfg.AddProfile<MappingProfile>()); var mapper = new Mapper(config); var list1 = new List<int> { 1, 2, 3 }; var list2 = mapper.Map<List<int>, List<string>>(list1); foreach (var item in list2) { Console.WriteLine(item); } ``` 在上面的代码中,首先创建一个MapperConfiguration对象,并指定映射配置类。然后,创建一个Mapper对象,并使用Map方法将list1映射为list2。最后,遍历list2并输出结果。 输出结果为: ``` null null null ``` 这是因为我们只指定了int到string的映射关系,但没有指定具体的映射规则。因此,需要在MappingProfile中添加具体的映射规则。例如: ```csharp public class MappingProfile : Profile { public MappingProfile() { CreateMap<int, string>().ConvertUsing(s => (s * 2).ToString()); } } ``` 这里的ConvertUsing方法用于指定具体的映射规则。在这个例子中,我们将int类型的值乘以2,并将结果转化为string类型。然后,再次运行程序,输出结果为: ``` 2 4 6 ``` 这样就完成了automap映射两个list的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值