AutoMapper之如何开始,适合入门和演示
原来想应该介绍下背景说明下好处什么的,仔细想都是废话 ,直接上代码吧。
首先有两个类,一个是和数据库对应的实体 Student,一个是和页面展示相关的页面模型 StudentModel。
/// <summary> |
public class StudentModel |
请不要关注为什么有这些字段和为什么设置这些字段,这些都是剧情需要。
为了将Student 转换成StudentModel,最初,我们需要写一个方法,通过循环的方式来做,如下:
//获取学生数据
var entities = db.Students.ToList();
var models = new List<StudentModel>();
foreach (var item in entities)
{
var model = new StudentModel();
model.Id = item.Id;
model.Birthday = item.Birthday.Value;
model.ShowBirthday = item.Birthday.Value.ToString("yyyy-MM-dd");
model.Genderx = item.Genderx;
model.Graduated = item.Graduated;
model.Professional = item.Professional;
model.Hobby = item.Hobby;
model.Avatar = item.Avatar;
model.Account = item.Account;
model.Password = item.Password; models.Add(model);
}
后来呢,我们有了LINQ,我们的代码进化了一下,如下:
//获取学生数据
var entities = db.Students.ToList(); var models = entities.Select(s => new StudentModel()
{
Id = s.Id,
Birthday = s.Birthday.Value,
ShowBirthday = s.Birthday.Value.ToString("yyyy-MM-dd"),
Genderx = s.Genderx,
Graduated = s.Graduated,
Professional = s.Professional,
Hobby = s.Hobby,
Avatar = s.Avatar,
Account = s.Account,
Password = s.Password
});
一般的转换无外乎这两种,再有就是一些大神,通过反射等技术自己写了一些helper,我等菜鸟自然没有这等功力来做,只能找现成的用了,这时候AutoMapper就登场了。
What is AutoMapper?
AutoMapper is an object-object mapper. Object-object mapping works by transforming an input object of one type into an output object of a different type. What makes AutoMapper interesting is that it provides some interesting conventions to take the dirty work out of figuring out how to map type A to type B. As long as type B follows AutoMapper's established convention, almost zero configuration is needed to map two types.
上文来自AutoMapper官方Wiki,同样的不要太关心。因为作者设定你已经知道AutoMapper是干嘛的了。如果不知道,回头看看上面的代码,领悟一下。
进入正题,如何使用AutoMapper简化我们的代码:
- 首先,要在项目中引入AutoMapper这个东东,如果VS中有Nuget这个工具,直接使用Nuget安装一下AutoMapper这个package,如果没有,那去官网下载一个DLL自行Copy过来吧。
- 一般AutoMapper使用分两步
- 注册对象映射关系,告诉AutoMapper对象A和对象B可以相互转换,并且转换规则是怎么样的,默认同名的属性不用特殊说明,自己会转换过去
- 使用Map方法,把对象A转换成对象B
根据官网介绍,有三种方式来使用AutoMapper,或者说三种配置的方式来完成。
前两种呢,就是在哪里使用就在哪里配置,每次用每次配置。第三种把配置的工作放在程序启动时处理,后面直接使用,无需每次配置。
一般开发中才使用第三种方案,前两个方案适合做代码演示或者临时使用。
- 第一种
//@1 第一种快捷使用方式
Mapper.Initialize(cfg => cfg.CreateMap<Student, StudentModel>());
var models = Mapper.Map<List<Student>, List<StudentModel>>(entities); - 第二种
//@2 第二种快捷使用方式
var config = new MapperConfiguration(cfg => cfg.CreateMap<Student, StudentModel>());
var mapper = config.CreateMapper();
var models= mapper.Map<List<Student>, List<StudentModel>>(entities); - 第三种,稍微复杂一点, 需要添加一个文件,并且修改Application_Start()方法,添加如下类文件:
/// <summary>
/// automapper配置文件
/// </summary>
public class OrganizationProfile : Profile
{
public OrganizationProfile()
{
CreateMap<Student, StudentModel>()
.ForMember(dest => dest.ShowBirthday,
opt =>
{
opt.MapFrom(src => src.Birthday.Value.ToString("yyyy-MM-dd"));
})
.ForMember(dest => dest.ShowGender,
opt =>
{
opt.MapFrom(src => src.Genderx == Domain.Common.Gender.Male ? "男" : "女");
}).ReverseMap();
}
}然后修改Application_Start()方法,如下:
//配置AutoMapper映射属性,在项目启动时生效
Mapper.Initialize(cfg =>
{
cfg.AddProfile<OrganizationProfile>();
});最后是调用Map()进行映射,如下:
var models = mapper.Map<List<Student>, List<StudentModel>>(entities);
OK,本文完结,以上是对AutoMapper的简单实用,适合用来体会AutoMapper的效果和演示其使用的入门Demo,实际使用中会涉及更多的映射配置,配合系统架构进行依赖注入等等,其实官网都有比较详细的介绍了,可以官网上找找,实在不行看下官网上的Example,应该会有帮助。
AutoMapper之如何开始,适合入门和演示的更多相关文章
- 适合入门自学服装裁剪滴书(更新ing)
[♣]适合入门自学服装裁剪滴书(更新ing) [♣]适合入门自学服装裁剪滴书(更新ing) 适合入门自学服装裁剪滴书(更新ing) 来自: 裁缝阿普(不为良匠,便为良医.) 2014-04-06 23 ...
- Easyui + asp.net mvc + sqlite 开发教程(录屏)适合入门
Easyui + asp.net mvc + sqlite 开发教程(录屏)适合入门 第一节: 前言(技术简介) EasyUI 是一套 js的前端框架 利用它可以快速的开发出好看的 前端系统 web ...
- 最适合入门的Laravel中级教程(一)
Laravel 是一个全栈框架: 我们使用 Laravel 开发业务常见有 3 个方向: 前端页面和后端逻辑混合的应用 主要是面向对 SEO 有需求的项目: 比如说新闻资讯博客文章等: 一般在控制器中 ...
- Laravel初级教程浅显易懂适合入门
整理了一些Laravel初级教程,浅显易懂,特适合入门,留给刚学习laravel想快速上手有需要的朋友 最适合入门的laravel初级教程(一)序言 最适合入门的laravel初级教程(二)安装使用 ...
- pc/移动端(手机端)浏览器的直播rtmp hls(适合入门者快速上手)
一.直播概述 关于直播,大概的过程是:推流端——>源站——>客户端拉流,用媒介播放 客户端所谓的拉流就是一个播放的地址url,会有多种类型的流: 视频直播服务目前支持三种直播协议,分别是R ...
- JavaScript: JavaScript的简介和入门代码演示
1.Javascript的发展历史介绍: javascript是指的实在网页上编写的编程语言,其主要是控制器html的动态显示效果.HTMl能带来的只是一些基本的页面的风格,而要展示的漂亮使用CSS, ...
- 【转】javascript入门系列演示·三种弹出对话框的用法实例
对话框有三种 1:只是提醒,不能对脚本产生任何改变: 2:一般用于确认,返回 true 或者 false ,所以可以轻松用于 if...else...判断 3: 一个带输入的对话框,可以返回用户填入的 ...
- javascript入门系列演示·三种弹出对话框的用法实例
对话框有三种 1:只是提醒,不能对脚本产生任何改变: 2:一般用于确认,返回 true 或者 false ,所以可以轻松用于 if...else...判断 3: 一个带输入的对话框,可以返回用户填入的 ...
- 01--Java语言概述与开发环境 最适合入门的Java教程
Java 程序运行机制 编译型语言: 使用专门的编译器,针对特定平台(操作系统)将某种高级语言源代码一次性"翻 译"成可被该平台硬件执行的机器码(包括机器指令和操作数),并包装成该 ...
随机推荐
- php接收base64编码的文件内容并保存
<?php header('Content-type:text/html;charset=utf-8'); //读取图片文件,转换成base64编码格式 $image_file = './fac ...
- leetcode303
public class NumArray { List<int> list = new List<int>(); public NumArray(int[] nums) { ...
- IntelliJ IDEA—IDEA2018.1激活方式
前言 以前用过2015的版本,后面就没有使用了,现在又重新用起来了,突然发现激活好难,通过网上找破解方式,总算找到了一种可以实现破解的方法了.. 破解方式 本人使用的是使用破解补丁的方式实现破解的,此 ...
- UNITY 接讯飞语音过程总结
11:13 2017/3/141,安装问题:JDK与ECLIPSE位数一定要对应,32位对64位会出现 java was returned ....code 13的弹框错误.版本号可以不一致.2,EC ...
- CentOS 7 调整 home分区 扩大 root分区
总体过程: 把/home内容备份,然后将/home文件系统所在的逻辑卷删除,扩大/root文件系统,新建/home ,恢复/home内容 1.查看分区 df -h 2.备份home分区文件 tar c ...
- 切线空间(Tangent Space)
http://download.autodesk.com/global/docs/maya2012/zh-cn/index.html?url=files/Polygons_nodes_Tangent_ ...
- METAL渲染是什么?
METAL渲染是什么? Metal渲染是由苹果公司为iOS8以及更新版本开发的全新的底层渲染API.它侧重于减少GPU驱动的工作量,从而当Metal调用时,CPU的消耗将降至最低.这样一来,游戏就可以 ...
- RabbitMQ学习在windows下安装配置
RabbitMQ学习一. 在windows下安装配置 1.下载并安装erlang,http://www.erlang.org/download.html,最新版是R15B01(5.9.1).由于我机器 ...
- C和C++中的不定参数
在初学C的时候,我们都会用到printf函数来写Hello World的程序.在我们看printf函数的声明时,会看到类似于下面代码 int printf(const char * __restric ...
- 初识STM32
1.什么是STM32 A.ST是意法半导体,一个公司名,即SOC厂商,生产芯片的厂商.ARM公司是IP厂商,即只生产内核的厂商. B.M-Microelectronics的缩写,表示微控制器,大家注意 ...