实体间转换工具。其实也可以用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. MySQL累积求和

      有如下表 id money 1 10 2 20 3 30 4 40   求出如下数据 id money cum 1 10 10 2 20 30 3 30 60 4 40 100   建表 CREA ...

  2. Atitit  Uncaught (in promise) SyntaxError Unexpected token < in JSON at position 0

    Atitit  Uncaught (in promise) SyntaxError  Unexpected token < in JSON at position 0  Uncaught (in ...

  3. git笔记-9-29

    //将工作区的a.txt文件更新到最后一次提交到本地仓库的状态,如果需要将文件回滚到某个特定的版本,将HEAD改成那个commit的id即可 git checkout HEAD a.txt //如果将 ...

  4. android studio: 一个Android studio 3.3.2 无法创建新项目的问题

    记录一个AS无法创建新项目的问题. 今天想写一个测试Demo,点击上面的“Start a new Android Studio Project” ,填写完包名和项目路径后,点“Finish”, AS无 ...

  5. vue的双向绑定

    1.效果 点击+-修改数量,金额跟着一起变动 2.index.html <!DOCTYPE html> <html lang="en"> <head& ...

  6. Push to origin/master was rejected (Git提交错误)(转)

    [问题描述] 在使用Git Push代码的时候,会出现 Push to origin/master was rejected 的错误提示. 在第一次提交到代码仓库的时候非常容易出现,因为初始化的仓库和 ...

  7. JavaScript反向shell

    Node.js反向Shell 摘自:http://www.itfang.net/?p=109 如下的Javascript就是一个Node.js的反向连接shell. 这个payload将会生成一个/b ...

  8. Amazon

    刚接到Recruiter电话,说恭喜,feedback都非常好. 心里大石落地,FLAG / UAT终于完成一家. 接下来就要加倍努力冲刺其他公司了. Mark: (入职以后一定要去地里补发一波面经, ...

  9. oneinstack 另一个 lnmp环境一键安装工具

    oneinstack  另一个 http://oneinstack.com/ OneinStack包含以下组合: lnmp(Linux + Nginx+ MySQL+ PHP) lamp(Linux ...

  10. Linux下apache activemq的安装与配置

    ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范 的 JMS Provider实现,尽管JMS规范出台已经是很 ...