全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

五步掌握OOM框架AutoMapper基本使用

写在前面

OOM顾名思义,Object-Object-Mapping实体间相互转换,AutoMapper也是个老生常谈了,其意义在于帮助你无需手动的转换简单而又麻烦的实体间关系,比如ViewModel和entity的转换,SearchModel和Entity的转换,我这篇分享的意义在于,网上大多数的分享都是几年前的,很多方法已经被废弃,到了编译器里会告诉你该方法已经过时,废弃的,不建议使用的,比如Mapper.CreateMap等方法,当然老司机大多数直接就去github看文档了,或者google一下就了解了,但是中文资料关于方法废弃后,并没有什么说明了。本篇的五个实例可以帮你解决常见的基本问题.

预备

首先我们预备一些ViewModel和TModel。ViewModel就是你和用户交互的实体。TModel就是你与数据库打交道的实体。

实体展示如下:

TModel有如下三个简单的实体,他们有独立的实体,也有一对多的实体。

public class TAddress
{
 public string Country { get; set; }
 public string City { get; set; }
 public string Street { get; set; }
 public string PostCode { get; set; }
 public string CreateTime { get; set; }
 public int CreateUserId { get; set; }
}
public class TAuthor
 {
  public string Name { get; set; }
  public string Description { get; set; }
  public List<TContactInfo> ContactInfo { get; set; }
 }
 public class TContactInfo
 {
 public int Id { get; set; }
 public string Email { get; set; }
 public string Blog { get; set; }
 public string Twitter { get; set; }
 }

ViewModel如下三个:

public class VM_Address
 {
 public string Country { get; set; }
 public string City { get; set; }
 public string City2 { get; set; }
 }
 public class VM_Author
 {
 public string Name { get; set; }
 public string Description { get; set; }
 public List<VM_ContactInfo> ContactInfo { get; set; }
 }
 public class VM_ContactInfo
 {
 public int Id { get; set; }
 public string Email { get; set; }
 public string Blog { get; set; }
 public string Twitter { get; set; }
 }

单个实体转换

单个实体转换的时候,在属性字段名称完全匹配的情况下,你只需指定两个实体间的转换规则,指定source源实体和destination目标实体。那么你应该参照如下实例:

VM_Address dto = new VM_Address
  {
  Country = "China",
  City = "Beijing"
  };
  Mapper.Initialize(m => m.CreateMap<VM_Address, TAddress>());
  TAddress address = Mapper.Map<VM_Address, TAddress>(dto);

请注意在AutoMapper5.x当中,Initialize来初始化你的规则是首选的。

在你指定转换规则后,请使用Map方法,进行转换并输出你的目标实体。还有第一个参数代表SourceModel,第二个参数是DestinationModel.

单个实体不同名属性转换

当你需要对不同名称的字段来进行映射的时候,请注意使用ForMember方法,第一个参数需要你制定所需特殊配置的目标字段,第二个参数你则需要制定你对该字段属性的操作,我选择了它提供的MapFrom方法,意义在于告诉AutoMapper,我需要讲目标实体的City来源 指定为 源实体的City2属性值。

VM_Address dto = new VM_Address
  {
  Country = "China",
  City2 = "Beijing"
  };
  Mapper.Initialize(m => m.CreateMap<VM_Address, TAddress>().ForMember(x => x.City, opt => opt.MapFrom(o => o.City2)));
  TAddress address = Mapper.Map<VM_Address, TAddress>(dto);

集合转换

在集合间转换的时候,你不需要配置目标List与源List对象中的匹配,而只需要配置你泛型对象的映射匹配关系。

  TAddress address = new TAddress { Country = "China", City = "Beijing" };
  TAddress address2 = new TAddress() { Country = "USA", City = "New York" };
  List<TAddress> addressList = new List<TAddress>() { address2, address };
  Mapper.Initialize(m => m.CreateMap<TAddress, VM_Address>());//这里仅需配置实体间的转换,而不是实体集合的转换
  List<VM_Address> res = Mapper.Map<List<TAddress>, List<VM_Address>>(addressList);

实体包含不同类型属性转换(忽略属性)

在实体包含不同类型属性的时候,比如TModel1中包含了一个List<TModel>,而你的ViewModel1中包含了一个List<ViewModel>.这个时候你可以选择忽略这个属性

 var contacts = new List<TContactInfo>() { new TContactInfo() 
          { Blog = "myblog", Email = "ws@qq.com" }, new TContactInfo() { Blog = "myblog", Email = "ll@qq.com" } };
  TAuthor author = new TAuthor() { Description = "描述", Name = "吴双", ContactInfo = contacts };
  Mapper.Initialize(m => { m.CreateMap<TAuthor, VM_Author>().ForMember(x => x.ContactInfo, opt => opt.Ignore()); });
       VM_Author dto = Mapper.Map<TAuthor, VM_Author>(author);
//这里的Ignore代表配置ContractInfo该属性的操作 为 忽略Ignore,映射时将忽略该属性 由于List<TContactInfo>()和List<VM_ContactInfo>() 是不同类型,所以需要配置忽略或者是特殊映射,特殊映射例子看下方

实体包含不同类型属性转换(指定属性Mapfrom)

当然你需要这个属性的时候,你可以不忽略他,而是使用MapFrom来进行特殊的指定,并且在类型不相同的时候,你要指定你两个类型间的映射匹配关系。正如下面实例中的

m.CreateMap<TContactInfo, VM_ContactInfo>();和
m.CreateMap<TAuthor, VM_Author>().ForMember(x => x.ContactInfo, opt => opt.MapFrom(o => o.ContactInfo));

var contacts = new List<TContactInfo>()
  {
  new TContactInfo() { Blog = "myblog", Email = "ws@qq.com" },
  new TContactInfo() { Blog = "myblog", Email = "ll@qq.com" }
  };
  TAuthor author = new TAuthor() { Description = "描述", Name = "吴双", ContactInfo = contacts };
  Mapper.Initialize(m =>
  {
  m.CreateMap<TContactInfo, VM_ContactInfo>();//注意 内部不同类型实体转换时必要的
  m.CreateMap<TAuthor, VM_Author>().ForMember(x => x.ContactInfo, opt => opt.MapFrom(o => o.ContactInfo));//注意 制定MapFrom是必要的
  });
  VM_Author dto = Mapper.Map<TAuthor, VM_Author>(author);

写在最后

在实体转换中,AutoMapper的必要性和实用性已经被你一览无余。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!


# automapper  # 使用  # ASP.NET Core使用AutoMapper实现实体映射  # .NET 6开发TodoList应用之使用AutoMapper实现GET请求  # C# 中AutoMapper的使用方法  # C# AutoMapper 使用方法总结  # .NET CORE中使用AutoMapper进行对象映射的方法  # .NET Core中依赖注入AutoMapper的方法示例  # 详解c# AutoMapper 使用方式  # Automapper实现自动映射的实例代码  # AutoMapper实体映射基本用法  # 不同类型  # 你可以  # 第一个  # 第二个  # 请注意  # 都是  # 有什么  # 是个  # 也有  # 包含了  # 你要  # 老生常谈  # 当你  # 只需  # 帮你  # 所需  # 你不  # 请使用  # 或者是  # 你对 


相关文章: 陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  如何配置FTP站点权限与安全设置?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  如何通过NAT技术实现内网高效建站?  如何通过建站之星自助学习解决操作问题?  建站之星代理如何优化在线客服效率?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  文字头像制作网站推荐软件,醒图能自动配文字吗?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南  成都网站制作报价公司,成都工业用气开户费用?  微课制作网站有哪些,微课网怎么进?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  h5网站制作工具有哪些,h5页面制作工具有哪些?  建站OpenVZ教程与优化策略:配置指南与性能提升  高端建站如何打造兼具美学与转化的品牌官网?  制作农业网站的软件,比较好的农业网站推荐一下?  简单实现Android验证码  代刷网站制作软件,别人代刷火车票靠谱吗?  建站主机选虚拟主机还是云服务器更好?  如何制作算命网站,怎么注册算命网站?  Java解压缩zip - 解压缩多个文件或文件夹实例  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  ,如何利用word制作宣传手册?  网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?  如何通过山东自助建站平台快速注册域名?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  北京建设网站制作公司,北京古代建筑博物馆预约官网?  如何用腾讯建站主机快速创建免费网站?  建站主机如何选?高性价比方案全解析  建站之星各版本价格是多少?  Python文件管理规范_工程实践说明【指导】  英语简历制作免费网站推荐,如何将简历翻译成英文?  网站按钮制作软件,如何实现网页中按钮的自动点击?  如何在橙子建站上传落地页?操作指南详解  海南网站制作公司有哪些,海口网是哪家的?  如何快速搭建自助建站会员专属系统?  如何打造高效商业网站?建站目的决定转化率  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  如何做网站制作流程,*游戏网站怎么搭建?  php条件判断怎么写_ifelse和switchcase的使用区别【对比】  C#怎么使用委托和事件 C# delegate与event编程方法  网页设计与网站制作内容,怎样注册网站?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何通过FTP空间快速搭建安全高效网站?  盘锦网站制作公司,盘锦大洼有多少5G网站?  如何在宝塔面板中修改默认建站目录? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。