ASP.NET Core(.Net 5)AutoMapper自动映射

  1. OOM
    Object-Object-Mapping实体间相互转换
  2. AutoMapper
    AutoMapper官方的解释:
    AutoMapper是一个对象-对象映射器。对象-对象映射通过将一种类型的输入对象转换为另一种类型的输出对象来工作。
    使AutoMapper变得有趣的是,它提供了一些有趣的约定,以免去搞清楚如何将类型A映射为类型B。只要类型B遵循AutoMapper既定的约定,就需要几乎零配置来映射两个类型。
    官网地址:https://docs.automapper.org/en/stable/Getting-started.html
其实就是AutoMapper帮助你无需手动的转换实体间关系

添加AutoMapper

引入NuGet包 AutoMapper.Extensions.Microsoft.DependencyInjection

注入AutoMapper的服务

AddAutoMapper 将会自动扫描程序集里所有包含映射关系的Profile文件

然后通过 AppDomain.CurrentDomain.GetAssemblies() automapper会加载到AppDomain中

在这里插入图片描述

实体

在这里插入图片描述
在这里插入图片描述

使用AutoMapper创建实体之间的关系,定义类继承 Profile

CreateMap<原对象,映射目标对象>;
.ReverseMap 相互转换映射

在这里插入图片描述

在Controller中使用AutoMapper并调用

在这里插入图片描述

集合时加List  _mapper.Map<List<目标对象>>(数据);

在这里插入图片描述

查看测试结果

在这里插入图片描述

其他方法

如果映射字段不一致
CreateMap<TouristRoute, TouristRouteDto>().ForMember(dest => dest.Price, opt => opt.MapFrom(src => src
                .OriginalPrice));
或者需要计算
CreateMap<TouristRoute, TouristRouteDto>().ForMember(dest => dest.Price, opt => opt.MapFrom(src => src
                .OriginalPrice * (decimal)(src.DiscountPresent ?? 1))).ReverseMap();
不想映射某个字段
 CreateMap<TouristRoute, TouristRouteDto>().ForMember(d=>d.Title,o=>o.Ignore());
 
字符串为空处理/替换
 CreateMap<TouristRoute,TouristRouteDto>().ForMember(d=>d.Title,o=>o.NullSubstitute("No data"));

条件映射
 CreateMap<TouristRoute,TouristRouteDto>().ForMember(d=>d.Title,o=>o.Condition(l=>!string.IsNullOrWhiteSpace(l.Title)));

前提条件映射(相比条件映射 运行更快,并且先调用条件,后分配值,还可以对操作值[Split...])
 CreateMap<TouristRoute,TouristRouteDto>().ForMember(d=>d.Title,o=>{o.PreCondition(l=>!string.isNullOrWhiteSpace(l.Title));o.MapFrom(l=>l.Title)})
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值