HTML5技术

一文为你详细讲解对象映射库【AutoMapper】所支持场景 - Jeffcky

字号+ 作者:H5之家 来源:H5之家 2017-10-08 12:03 我要评论( )

前言 在AutoMapper未出世前,对象与对象之间的映射,我们只能通过手动为每个属性一一赋值,时间长了不仅是我们而且老外也觉得映射代码很无聊

前言

在AutoMapper未出世前,对象与对象之间的映射,我们只能通过手动为每个属性一一赋值,时间长了不仅是我们而且老外也觉得映射代码很无聊啊。这个时候老外的所写的强大映射库AutoMapper横空出世,AutoMapper是一个对象映射库, 它提供简单的类型配置,以及简单的映射测试。对象映射通过将一种类型的输入对象转换为不同类型的输出对象而起作用。项目之前有用过,但是对其了解不够透彻映射时有时候会抛异常,后来弃之,本节我们来详细了解下AutoMapper映射库。

AutoMapper基础版

在AutoMapper中创建映射配置有两种方式。一种是通过实例化MapperConfiguration类来配置,一种是通过类Mapper中的静态方法Initialize来配置,下面我们来看看。

public class User { public int Id { get; set; } public int Age { get; set; } public string Name { get; set; } } public class UserDTO { public int Id { get; set; } public int Age { get; set; } public string Name { get; set; } }

static void Main(string[] args) { var user = new User() { Id = 1, Age = 10, Name = }; var config = new MapperConfiguration(cfg => cfg.CreateMap<User, UserDTO>()); mapper = config.CreateMapper(); //或者var mapper = new Mapper(config); userDTO = mapper.Map<User, UserDTO>(user); Console.ReadKey(); }

在Map映射方法中有两个参数,我们通俗讲则是从一个映射到另一个对象,在AutoMapper中将其称为映射源和映射目标。

关于本节映射都通过如下静态方法来实现,简单粗暴。

Mapper.Initialize(cfg => cfg.CreateMap<User, UserDTO>()); var userDTO = Mapper.Map<User, UserDTO>(user);

接下来我们再来看若映射源为空,那么是否会进行映射,还是抛异常呢?

static void Main(string[] args) { User user = null; Mapper.Initialize(cfg => cfg.CreateMap<User, UserDTO>()); var userDTO = Mapper.Map<User, UserDTO>(user); Console.ReadKey(); }

到此我们总结出一点:AutoMapper将映射源映射到目标时,AutoMapper将忽略空引用异常。 这是AutoMapper默认设计。

是不是到此关于AutoMapper就讲完了呢?童鞋想想所有场景嘛,这个只是最简单的场景,或者天马行空想想其他问题看看AutoMapper支持不,比如我想想,AutoMapper对属性大小写是否敏感呢?想完就开干啊。我们将User对象属性全部改为小写:

public class User { public int id { get; set; } public int age { get; set; } public string name { get; set; } }

static void Main(string[] args) { var user = new User() { id = 1, age = 10, name = }; Mapper.Initialize(cfg => cfg.CreateMap<User, UserDTO>()); var userDTO = Mapper.Map<User, UserDTO>(user); Console.ReadKey(); }

到这里我们又可以总结出一点:AutoMapper从映射源到映射目标时不区分大小写。

AutoMapper中级版 

我们讲完基础版,接下来来进入中级版看看AutoMapper到底有多强,磕不屎你哟。是否支持继承映射哎。

public class Base { public int Id { get; set; } public DateTime CreatedTime { get; set; } public DateTime ModifiedTime { get; set; } } public class User : Base { public int Age { get; set; } public string Name { get; set; } }

public class UserDTO { public int Id { get; set; } public DateTime CreatedTime { get; set; } public DateTime ModifiedTime { get; set; } public int Age { get; set; } public string Name { get; set; } }

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • electron打包成桌面应用程序的详细介绍 - YouForMe

    electron打包成桌面应用程序的详细介绍 - YouForMe

    2017-08-18 08:01

  • 抓包工具 - Fiddler(详细介绍) - 一加一

    抓包工具 - Fiddler(详细介绍) - 一加一

    2017-06-15 16:01

  • Redis 集群搭建详细指南 - Mafly

    Redis 集群搭建详细指南 - Mafly

    2017-06-14 10:00

  • 致DBA:为什么你经常犯错,是因为你做的功课不够 - 飞鸿无痕

    致DBA:为什么你经常犯错,是因为你做的功课不够 - 飞鸿无痕

    2017-05-21 08:00

网友点评
.