当前位置: 首页 > news >正文

金融投资理财网站建设/免费自媒体网站

金融投资理财网站建设,免费自媒体网站,网页设计与制作教程目录,做画册好的网站本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文地址 www.cnblogs.com/tdws 写在前面OOM顾名思义,Object-Object-Mapping实体间相互转换,AutoMapper也是个老生常谈了,其意义在于帮助你无需手动的转换简单而又麻烦的…

本文版权归博客园和作者吴双本人共同所有,转载和爬虫请注明原文地址 www.cnblogs.com/tdws

写在前面

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的必要性和实用性已经被你一览无余。 

如果我的点滴分享对你有点滴帮助,欢迎点击下方红色按钮关注,我将持续输出实用分享。也欢迎为你自己,也为我点赞。

http://www.lbrq.cn/news/1087471.html

相关文章:

  • 网站开发软件技术专业好吗/目前小说网站排名
  • 福州做网站建设/中国搜索引擎有哪些
  • 深圳建立网站公司网站/百度指数怎么查
  • 卖汽车的网站怎么做的吗/关键词搜索引擎工具
  • 高端网站建设网站/seo顾问什么职位
  • 什么是搭建网站/seo快速排名案例
  • 个人web网站/周口seo公司
  • 扶余手机网站开发/全球搜索
  • 男女做爰视频免费网站/全网关键词指数查询
  • 做网站的重要性/做企业推广的公司
  • 加利弗设计公司官网/哪些网站可以seo
  • 申请绿色网站/新闻发稿平台
  • 求购做网站/金阊seo网站优化软件
  • 做天猫网站价格表/网站优化助手
  • 什么网页可以做网站/百度seo优化系统
  • 北京市网站建设企业/淘宝运营培训课程免费
  • 最权威的公文写作网站/百度学术官网登录入口
  • 2017网站建设/东莞seo建站投放
  • 贵阳制作网站/百度seo排名培训优化
  • 网站建设的设备/百度关键词排名突然下降很多
  • 引用网站的内容如何做注释/青岛seo整站优化
  • 关于春节的网站设计html/西安seo公司
  • 多语言网站建设应注意哪些事项/统计网站流量的网站
  • 做网站实现发送信息功能/营销推广案例
  • 做的比较好的网页设计网站/企业如何开展网络营销
  • 手机建站服务/制作网站的平台
  • 理论网站建设实施方案/百度认证营销推广师
  • 携程的网站建设/网站seo优化是什么意思
  • 资料库网站源码/广州优化防控措施
  • 网站建设为什么需要备案/西地那非片说明书
  • 2.苹果ios逆向-Windows电脑端环境搭建-Conda安装和使用(使用Conda来管理多个Python环境)
  • Maven之多模块项目管理
  • 01人工智能中优雅草商业实战项目视频字幕翻译以及声音转译之底层处理逻辑阐述-卓伊凡|莉莉
  • 基于 KNN 算法的手写数字识别项目实践
  • 从0到1学Pandas(七):Pandas 在机器学习中的应用
  • 【Bluedroid】btif_av_sink_execute_service之服务器禁用源码流程解析