前段时候做个小项目用到了autoMapper(参考了NOP里的用法),感觉还行,用起来挺方便的。首先复杂的东西我就不说了,至于详细的教程我也就不写了,比较园子里有很多这样的文章,我就分享下,在项目中实际的用法。毕竟我们自己练习和项目中使用还是有些差别的。

一、创建AutoMapper转换规则

首先代码如下:

            //===============================执行AutoMapper开始====================================================

            var startUpTaskTypes = typeFinder.FindClassesOfType<IStartupTask>();
var startUpTasks = new List<IStartupTask>();
foreach (var startUpTaskType in startUpTaskTypes)
startUpTasks.Add((IStartupTask)Activator.CreateInstance(startUpTaskType));
//sort
startUpTasks = startUpTasks.AsQueryable().OrderBy(st => st.Order).ToList();
foreach (var startUpTask in startUpTasks)
startUpTask.Execute();
//===============================执行AutoMapper结束==================================================== builder.Update(container);

代码分析如下:

1、在网站初始化的时候,加载所有web网站中所有程序集。

2、找到所有实现了IStartupTask接口的实现类,并创建

3、执行所有IStartupTask接口的实现类的Execute()方法,该方法执行并创建AutoMapper映射关系

IStartupTask实现类也很简单,这里我没有用到复杂的转换规则,如果有复杂的规则大家可以参考其他文章,代码如下:

  public class AutoMapperStartupTask:IStartupTask
{
public void Execute()
{
Mapper.CreateMap<AnnexSetting, AnnexSettingDto>(); Mapper.CreateMap<AnnexSettingDto, AnnexSetting>(); Mapper.CreateMap<BaseMpSet, BaseMpSetDto>();
Mapper.CreateMap<BaseMpSetDto, BaseMpSet>(); } }

上面我们就完成了两个Model模型和DTO实体之间做的转换规则,如果有其他的模型和DTO实体的转换规则可以在这里添加。注:这些工作都是网站初始化的时候一次加载执行的。

二、执行AutoMapper转换规则

首先还是看代码:

  public static class MappingExtensions
{
public static TDestination MapTo<TSource, TDestination>(this TSource source, TDestination destination)
{
// return Mapper.DynamicMap<TSource, TDestination>(source);
return Mapper.Map(source, destination);
} public static TDestination MapTo<TSource, TDestination>(this TSource source)
{
return Mapper.Map<TSource, TDestination>(source);
}
#region 设置 /// <summary>
/// 附件设置
/// </summary>
/// <param name="model"></param>
/// <param name="destination"></param>
/// <returns></returns>
public static AnnexSetting ToEntity(this AnnexSettingDto model, AnnexSetting destination)
{
return model.MapTo(destination);
} public static AnnexSettingDto ToModel(this AnnexSetting entity)
{
return entity.MapTo<AnnexSetting, AnnexSettingDto>();
} #endregion
}

上面的代码其实是执行Mapper的标准写法,我们在使用的时候可以这样写:

  public ActionResult Annex()
{
//这里其实从数据库加载出来的模型类
var annexSettings = _settingService.LoadSetting<AnnexSetting>(); //将模型类转换为dto类
var model = annexSettings.ToModel();
//将dto对象传输到页面上
return View(model);
}

从上面第七行代码看出,我们只需调用这个方法即可实现转换,就这么简单啦。。。

AutoMapper用法一瞥的更多相关文章

  1. AutoMapper用法(转载)

    申明 本文转载自http://www.qeefee.com/article/automapper 作者:齐飞 配置AutoMapper映射规则 AutoMapper是基于约定的,因此在实用映射之前,我 ...

  2. Asp.Net AutoMapper用法

    1.AutoMapper简介 用于两个对象映射,例如把Model的属性值赋值给View Model.传统写法会一个一个属性的映射很麻烦,使用AutoMapper两句代码搞定. 2.AutoMapper ...

  3. AutoMapper用法 转载https://www.cnblogs.com/youring2/p/automapper.html

    AutoMapper是对象到对象的映射工具.在完成映射规则之后,AutoMapper可以将源对象转换为目标对象. 配置AutoMapper映射规则 AutoMapper是基于约定的,因此在实用映射之前 ...

  4. AutoMapper用法

    可在每层这样写一个类,整合每个实体类的映射 public class AutoMapperHelper { public static void Register() { Mapper.Initial ...

  5. CSS、HTML5、JS

    [att*=value]{}包含value属性的所有元素样式.[id*=div]{} a[href$=jpg]:after{} [att^=value]{}开头字符包含value属性的所有元素样式 [ ...

  6. .Net Core AA.FrameWork应用框架介绍

    开发多年,一直在从社区获取开源的便利,也深感社区力量的重要性,今天开源一个应用基础框架AA.FrameWork,也算是回馈社区,做出一点点贡献,希望能够帮助类似当年入行的我. AA.FrameWork ...

  7. automapper的简单用法

    AutoMapper对象转换方面(Object-Object Mapping)对象映射工具,实现对象和对象之间的转化.主要应用在项目的dto,model,entity或viewmodel之间转换,其实 ...

  8. AutoMapper简单用法

    首先在NuGet添加AutoMapper /// <summary> /// AutoMapper帮助类 /// </summary> public static class ...

  9. AutoMapper Profile用法

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using AutoMappe ...

随机推荐

  1. IIS7显示ASP的详细错误信息到浏览器

    服务端环境:Windows2008 + IIS7 客户端浏览器设置:取消“显示友好的HTTP错误信息” IIS7设置(GUI): 1. 网站->ASP->调试属性->将错误发送到浏览 ...

  2. 一个优秀windows C++程序员的知识体系

    思考一个优秀windows C++ 程序员该有哪些知识,可最终发现什么知识都不能少, 看下图: 除了上面知识,程序员还要不断学习, 保持对新知识的热情. 转自http://www.cppblog.co ...

  3. Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(二)

    一.前提: 完成前一篇的内容. 具体参考:Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(一)篇 二.本篇目标: l  说说关于cocos2dx手机分辨率适配 l  对前一篇完成的塔防游戏原型进 ...

  4. EMW 性能优化二之---并发配置

    EMW 性能优化二之---并发配置 在前一个日志中写到交货的异步更新,对于RFUI RF的前台操作会提升效率,异步更新不用等待更新状态的返回,启用更新队列的方式执行(SM13). 下面再补全性能相关的 ...

  5. VS.PHP详细破解教程,用Visual Studio编写PHP代码插件PhpTools

    一.准备文件:(下载地址:http://download.csdn.net/detail/wulang1988/9662363) Default.aspx是解决在线破解文件:PhptoolCracke ...

  6. 修改ulimit

    ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小.进程数据块的大小.Shell 进程创建文件的大小.内存锁住的大小.常驻内存集的大小.打开文件描 ...

  7. redis的基本使用

    Redis的应用 http://www.redis.cn/commands.html http://www.cnblogs.com/ikodota/archive/2012/03/05/php_red ...

  8. BZOJ 3732: Network 最小生成树 倍增

    3732: Network 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3732 Description 给你N个点的无向图 (1 &l ...

  9. 代码生成器Sql Server 和 Mysql 数据库脚本

    经常用到代码生成器,对于取数据脚本做个记录: #region SQL-SqlServer private string SqlTableList = @"SELECT so.name, Co ...

  10. HDU 4759 Poker Shuffle

    Poker Shuffle Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...