实体间转换工具。其实也可以用Json来实现同名属性、异名属性(用JsonProperty指明)的自动转换

最新版本6.11

需要使用vs2013以上。vs2012下载新版 nuget会遇到问题、只能旧版。

 using AutoMapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace AutoMapperVs2015.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
} public ActionResult About()
{
ViewBag.Message = "Your application description page."; return View();
} public ActionResult Contact()
{
ViewBag.Message = "Your contact page."; return View();
} public JsonResult TestAutoMaper()
{
//Table=>DTO。属性相同自动匹配;且组件支持命名规范的属性名称自动匹配
Mapper.Initialize(cfg => //https://github.com/AutoMapper/AutoMapper/wiki/Getting-started
{
cfg.CreateMap<TB_MENU, DTO_MENU>();
//cfg.CreateMap<DTO_MENU, TB_MENU>();
});
var tbMenu = new TB_MENU() { MENU_NAME = "权限管理", MENU_LEVEL = "" };
var dto = Mapper.Map<DTO_MENU>(tbMenu);
return Json(dto, JsonRequestBehavior.AllowGet); //DTO=>Table。属性相同自动匹配;且组件支持命名规范的属性名称自动匹配
//Mapper.Initialize(cfg => {
// //cfg.CreateMap<TB_MENU, DTO_MENU>();
// cfg.CreateMap<DTO_MENU, TB_MENU>();
//});
//var dtoMenu = new DTO_MENU() { MENU_NAME = "权限管理2", MENU_LEVEL = "2" };
//var tbMenu = Mapper.Map<TB_MENU>(dtoMenu);
//return Json(tbMenu, JsonRequestBehavior.AllowGet); //Table=>DTO。属性相同自动匹配;不相同且不符合命名规范的属性,需要人工定义对应匹配关系
//TODO:人工定义方法未知、没查到相关文档,旧文档已失效(http://www.cnblogs.com/xishuai/p/3700052.html)。
//Mapper.Initialize(cfg =>
//{
// cfg.CreateMap<TB_MENU, DTO_MENU>().ForMember(),
//});
//var dtoMenu = new DTO_MENU() { MENU_NAME = "权限管理2", MENU_LEVEL = "2" };
//var tbMenu = Mapper.Map<TB_MENU>(dtoMenu);
//return Json(tbMenu, JsonRequestBehavior.AllowGet); }
} public class TB_MENU
{
public TB_MENU()
{
} public string MENU_LEVEL { get; set; }
public string MENU_NAME { get; set; }
} public class DTO_MENU
{
public DTO_MENU()
{
} public string MENU_LEVEL { get; set; }
public string MENU_NAME { get; set; }
}
}

未完待续://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

AutoMapper介绍(未完待续、部分没实现)的更多相关文章

  1. numpy用法介绍-未完待续

    简介 NumPy(Numerical Python简称) 是高性能科学计算和数据分析的基础包 为什么使用? 标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元 ...

  2. Go web编程学习笔记——未完待续

    1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...

  3. Reading | 《数字图像处理原理与实践(MATLAB版)》(未完待续)

    目录 一.前言 1.MATLAB or C++ 2.图像文件 文件头 调色板 像素数据 3.RGB颜色空间 原理 坐标表示 4.MATLAB中的图像文件 图像类型 image()函数 imshow() ...

  4. MVC丶 (未完待续······)

         希望你看了此小随 可以实现自己的MVC框架     也祝所有的程序员身体健康一切安好                                                     ...

  5. 一篇文章让Oracle程序猿学会MySql【未完待续】

    一篇文章让Oracle DB学会MySql[未完待续] 随笔前言: 本篇文章是针对已经能够熟练使用Oracle数据库的DB所写的快速学会MySql,为什么敢这么说,是因为本人认为Oracle在功能性方 ...

  6. [python]爬代理ip v2.0(未完待续)

    爬代理ip 所有的代码都放到了我的github上面, HTTP代理常识 HTTP代理按匿名度可分为透明代理.匿名代理和高度匿名代理. 特别感谢:勤奋的小孩 在评论中指出我文章中的错误. REMOTE_ ...

  7. 2017-2-17,c#基础,输入输出,定义变量,变量赋值,int.Parse的基础理解,在本的初学者也能看懂(未完待续)

    计算机是死板的固定的,人是活跃的开放的,初学c#第一天给我的感觉就是:用人活跃开放式的思维去与呆萌的计算机沟通,摸清脾气,有利于双方深入合作,这也是今晚的教训,细心,仔细,大胆 c#基础 1.Hell ...

  8. GitHub 入门不完全指南(未完待续)

    我一直认为 GitHub 是一座宝藏,想让更多人的知道它.加入到这个社区中.本人能力有限,如果文中出现不对的地方,欢迎指正交流. 一.前言 大家好,我是削微寒(xuē wēi hán),一个走在进阶路 ...

  9. 从Socket入门到BIO,PIO,NIO,multiplexing,AIO(未完待续)

    Socket入门 最简单的Server端读取Client端内容的demo public class Server { public static void main(String [] args) t ...

随机推荐

  1. VSCode配置TypeScript

    网上教程一堆,记录下我认为的关键点: 1.创建tsconfig.json,使用命令行在项目文件夹下输入“tsc --init”即可: 2.创建tasks.json,在VSCode中,使用ctrl+sh ...

  2. linux每日命令(11):cat命令

    cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 一.命令格式: cat [参数] [文件] ...

  3. 【Java】Comparable和Comparator接口的区别

    Java提供了只包含一个compareTo()方法的Comparable接口.这个方法可以个给两个对象排序.具体来说,它返回负数,0,正数来表明已经存在的对象小于,等于,大于输入对象. Java提供了 ...

  4. Java知多少(73)文件的压缩处理

    Java.util.zip 包中提供了可对文件的压缩和解压缩进行处理的类,它们继承自字节流类OutputSteam 和 InputStream.其中 GZIPOutputStream 和 ZipOut ...

  5. An SPI class of type org.apache.lucene.codecs.PostingsFormat with name 'Lucene50' does not exist. You need to add the corresponding JAR file supporting this SPI to your classpath. The current classp

    背景介绍: 当ES中guava库与hive等组件的库冲突时,对Elasticsearch库进行shade,relocate解决库冲突问题. 当使用"org.apache.maven.plug ...

  6. java-信息安全(十二)-数字签名【Java证书体系实现】

    概述 信息安全基本概念 数字证书 数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上 ...

  7. feign调用接口session丢失解决方案

    微服务使用feign相互之间调用时,因为feign默认不传输Header,存在session丢失的问题.例如,使用Feign调用某个远程API,这个远程API需要传递一个鉴权信息,我们可以把cooki ...

  8. 131、ThreadLocal (转载)

    http://blog.csdn.net/lufeng20/article/details/24314381 http://baike.baidu.com/link?url=7eL0qQm_5ULls ...

  9. 除了/etc/init.d/加启动脚本 或者在/etc/rc.local中加启动命令,还可以通过crontab来完成服务器重启后自动启动服务的操作

    @reboot /bin/sh /opt/soft/percona/bin/mysqld_safe --defaults-file=/mnt/perconadata/my.cnf --basedir= ...

  10. LeetCode - 872. Leaf-Similar Trees

    Consider all the leaves of a binary tree.  From left to right order, the values of those leaves form ...