AutoMapper介绍(未完待续、部分没实现)
2017-09-29 00:24
323 查看
实体间转换工具。其实也可以用Json来实现同名属性、异名属性(用JsonProperty指明)的自动转换
最新版本6.11
需要使用vs2013以上。vs2012下载新版 nuget会遇到问题、只能旧版。
未完待续://TODO:人工定义方法未知、没查到相关文档,旧文档已失效(http://www.cnblogs.com/xishuai/p/3700052.html)。
新文档:https://github.com/AutoMapper/AutoMapper/wiki/Getting-started(官网)
旧文档参考(好多方法在新版中已经不正确、弃用、vs编译失败)
http://www.cnblogs.com/xishuai/p/3700052.html
(
论点:属性相同自动匹配;且组件支持命名规范的属性名称自动匹配。 这点也可以用json实现,本文开头已提到。
可以看到配置相当的简单,只要设置下Order和OrderDto之间的类型映射就可以了,我们看OrderDto中的CustomerName和Total属性在领域模型Order中并没有与之相对性,没什么可以转换呢,感觉好神奇的样子,其实仔细发现这些属性的命名都有一定的规则,AutoMapper在做解析的时候会按照PascalCase(帕斯卡命名法),就是一种变量命名法,除了PascalCase还有Hungarian(匈牙利命名法)和camelCase(骆驼命名法),PascalCase就是指混合使用大小写字母来构成变量和函数的名字,首字母要大写,camelCase首字母小写,我们C#命名中,一般使用的是camelCase和PascalCase,比较高级的是PascalCase。
但是为什么AutoMapper会解析Total呢?因为在领域模型Order中有个GetTotal()方法,AutoMapper会解析“Get”之后的单词,所以会与Total相对应,如果你把OrderDto的属性“Total”改为“Totals”,就会发现得到的“Totals”为0。理解了AutoMapper的解析方式,我们就要注意在编写变量、属性或是方法名称的时候一定要规范,这也是一种好的习惯。
)
http://blog.csdn.net/csethcrm/article/details/52934325
最新版本6.11
需要使用vs2013以上。vs2012下载新版 nuget会遇到问题、只能旧版。
1 using AutoMapper; 2 using System; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Web; 6 using System.Web.Mvc; 7 8 namespace AutoMapperVs2015.Controllers 9 { 10 public class HomeController : Controller 11 { 12 public ActionResult Index() 13 { 14 return View(); 15 } 16 17 public ActionResult About() 18 { 19 ViewBag.Message = "Your application description page."; 20 21 return View(); 22 } 23 24 public ActionResult Contact() 25 { 26 ViewBag.Message = "Your contact page."; 27 28 return View(); 29 } 30 31 public JsonResult TestAutoMaper() 32 { 33 //Table=>DTO。属性相同自动匹配;且组件支持命名规范的属性名称自动匹配 34 Mapper.Initialize(cfg => //https://github.com/AutoMapper/AutoMapper/wiki/Getting-started 35 { 36 cfg.CreateMap<TB_MENU, DTO_MENU>(); 37 //cfg.CreateMap<DTO_MENU, TB_MENU>(); 38 }); 39 var tbMenu = new TB_MENU() { MENU_NAME = "权限管理", MENU_LEVEL = "1" }; 40 var dto = Mapper.Map<DTO_MENU>(tbMenu); 41 return Json(dto, JsonRequestBehavior.AllowGet); 42 43 //DTO=>Table。属性相同自动匹配;且组件支持命名规范的属性名称自动匹配 44 //Mapper.Initialize(cfg => { 45 // //cfg.CreateMap<TB_MENU, DTO_MENU>(); 46 // cfg.CreateMap<DTO_MENU, TB_MENU>(); 47 //}); 48 //var dtoMenu = new DTO_MENU() { MENU_NAME = "权限管理2", MENU_LEVEL = "2" }; 49 //var tbMenu = Mapper.Map<TB_MENU>(dtoMenu); 50 //return Json(tbMenu, JsonRequestBehavior.AllowGet); 51 52 53 //Table=>DTO。属性相同自动匹配;不相同且不符合命名规范的属性,需要人工定义对应匹配关系 54 //TODO:人工定义方法未知、没查到相关文档,旧文档已失效(http://www.cnblogs.com/xishuai/p/3700052.html)。 55 //Mapper.Initialize(cfg => 56 //{ 57 // cfg.CreateMap<TB_MENU, DTO_MENU>().ForMember(), 58 //}); 59 //var dtoMenu = new DTO_MENU() { MENU_NAME = "权限管理2", MENU_LEVEL = "2" }; 60 //var tbMenu = Mapper.Map<TB_MENU>(dtoMenu); 61 //return Json(tbMenu, JsonRequestBehavior.AllowGet); 62 63 } 64 } 65 66 public class TB_MENU 67 { 68 public TB_MENU() 69 { 70 } 71 72 public string MENU_LEVEL { get; set; } 73 public string MENU_NAME { get; set; } 74 } 75 76 public class DTO_MENU 77 { 78 public DTO_MENU() 79 { 80 } 81 82 public string MENU_LEVEL { get; set; } 83 public string MENU_NAME { get; set; } 84 } 85 }
未完待续://TODO:人工定义方法未知、没查到相关文档,旧文档已失效(http://www.cnblogs.com/xishuai/p/3700052.html)。
新文档:https://github.com/AutoMapper/AutoMapper/wiki/Getting-started(官网)
旧文档参考(好多方法在新版中已经不正确、弃用、vs编译失败)
http://www.cnblogs.com/xishuai/p/3700052.html
(
论点:属性相同自动匹配;且组件支持命名规范的属性名称自动匹配。 这点也可以用json实现,本文开头已提到。
可以看到配置相当的简单,只要设置下Order和OrderDto之间的类型映射就可以了,我们看OrderDto中的CustomerName和Total属性在领域模型Order中并没有与之相对性,没什么可以转换呢,感觉好神奇的样子,其实仔细发现这些属性的命名都有一定的规则,AutoMapper在做解析的时候会按照PascalCase(帕斯卡命名法),就是一种变量命名法,除了PascalCase还有Hungarian(匈牙利命名法)和camelCase(骆驼命名法),PascalCase就是指混合使用大小写字母来构成变量和函数的名字,首字母要大写,camelCase首字母小写,我们C#命名中,一般使用的是camelCase和PascalCase,比较高级的是PascalCase。
但是为什么AutoMapper会解析Total呢?因为在领域模型Order中有个GetTotal()方法,AutoMapper会解析“Get”之后的单词,所以会与Total相对应,如果你把OrderDto的属性“Total”改为“Totals”,就会发现得到的“Totals”为0。理解了AutoMapper的解析方式,我们就要注意在编写变量、属性或是方法名称的时候一定要规范,这也是一种好的习惯。
)
http://blog.csdn.net/csethcrm/article/details/52934325
相关文章推荐
- Linux 实时技术与典型实现分析, 第 1 部分: 介绍
- 关于set的底层实现原理部分介绍及使用 hashcode和equals 使用
- 比特币系统采用的公钥密码学方案和ECDSA签名算法介绍——第二部分:代码实现(C语言)
- 比特币系统采用的公钥密码学方案和ECDSA签名算法介绍——第二部分:代码实现(C语言)
- Linux 实时技术与典型实现分析, 第 1 部分: 介绍
- Android开发,MapBox地图详细介绍、使用、部分功能实现(初始化、标记、定位、styleurl)
- 部分排序算法的介绍及实现
- asp下tag的实现,简单介绍与部分代码
- asp下tag的实现,简单介绍与部分代码
- HTML5介绍和部分功能实现
- asp下tag的实现,简单介绍与部分代码
- MySQL-2 :MVCC及实现介绍
- 使用 IIS 进行 Microsoft ASP.NET 2.0 成员/角色管理,第 2 部分:实现
- 利用C++模板,代替虚函数,实现类的静态多态性(加入性能测试部分)
- html meta部分字段介绍
- 把程序的定义与实现部分用头文件与源文件分开
- J2EE Web服务开发系列之十二: 实现安全的AXIS Web服务,第1部分
- Android之TextView实现文字过长时省略部分或者滚动显示
- 整理系列-20161118- PHP 邮件接收功能实现「部分资源mark」
- java 孙鑫 第六课(第四部分)HashMap和TreeMap类介绍