zoukankan      html  css  js  c++  java
  • AutoMapper介绍(未完待续、部分没实现)

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

    最新版本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

  • 相关阅读:
    Spring--AOP
    Database--事务
    Neo4j--UNIQUE约束
    Neo4j--INDEX索引
    排序算法 目录
    数据结构 目录
    设计模式 目录
    建造者模式及应用举例
    模板模式以及应用举例
    真·随笔
  • 原文地址:https://www.cnblogs.com/nlh774/p/7609214.html
Copyright © 2011-2022 走看看