OOM  AutoMapper的简单实用

一.前言:

OOM顾名思义,Object-Object-Mapping实体间相互转换,AutoMapper也是个老生常谈了,其意义在于帮助你无需手动的转换简单而又麻烦的实体间关系,比如ViewModel和entity的转换,SearchModel和Entity的转换

  先来思考一个问题:一个项目分多层架构,如显示层、业务逻辑层、服务层、数据访问层。层与层访问需要数据载体,也就是类。如果多层通用一个类,一则会暴露出每层的字段,二者会使类字段很多,而且会出现很多冗余字段,这种方式是不可取的;如果每层都使用不同的类,则层与层调用时,一个字段一个字段的赋值又会很麻烦。针对第二种情况,可以使用AutoMapper来帮助我们实现类字段的赋值及转换。

AutoMapper是一个对象映射器,它可以将一个一种类型的对象转换为另一种类型的对象。AutoMapper提供了映射规则及操作方法,使我们不用过多配置就可以映射两个类。

二.demo:

先来两个类:一个是业务层的类,一个是数据访问层的类:

1.业务层的类:UserViewModel.cs

    public class UserViewModel
{
/// <summary>
/// 用户ID
/// </summary>
public string UserId { get; set; } /// <summary>
/// 账号
/// </summary>
public string Account { get; set; } /// <summary>
/// 密码
/// </summary>
public string Password { get; set; } }

2.数据访问层的类:UserEntity.cs

    public class UserEntity
{
/// <summary>
/// 用户ID
/// </summary>
[Key]
public string UserId { get; set; } /// <summary>
/// 账号
/// </summary>
public string Account { get; set; } /// <summary>
/// 密码
/// </summary>
public string Password { get; set; } }

使用AutoMapper.dll  v1.0版本

1.静态映射:

静态映射配置:

 public class BootAutoMapper
{
public static void Register()
{
Mapper.Initialize(x =>
{
x.AddProfile<AutoMapperConfigProfile>();
});
}
} public class AutoMapperConfigProfile : Profile
{
protected override void Configure()
{
CreateMap<UserEntity, UserViewModel>();
CreateMap<UserViewModel, UserEntity>(); }
}

静态映射使用:

UserViewModel model= Mapper.Map<UserEntity, UserViewModel>(entity);

2.动态映射:(不需要配置)

UserViewModel model= Mapper.DynamicMap<UserEntity, UserViewModel>(entity);

三.经验之谈:

动态映射会出事,此话怎讲呢,来听听我的案例:

开发了一套xx系统,由于对此内裤熟悉不深入,掉进坑了。系统在不指定的时间就崩溃了,排查了很久终于找到原因了,是由于系统中使用的是automapper的动态映射造成的。超过指定的时间应用程序池将回收,如果用户刚好在此时间上访问系统,就造成了系统无法访问,因为对象被iis回收了。

在高版本上动态映射已经被抛弃了。

四.错误现象:

错误如下图,实体映射转换时,出现了类型错误

五.解决方案:

1.iis的应用程序池设置为回收时间为0,代表不回收,如下图:

2.将动态映射修改为静态映射即可;

OOM AutoMapper的简单实用的更多相关文章

  1. jQuery的几种简单实用效果

    许久未分享博客,或许已生疏. 闲来无事, 分享几个jQuery简单实用的效果案例 不喜勿喷... 1.页面常用的返回顶部 <!DOCTYPE html> <html lang=&qu ...

  2. 经验分享:10个简单实用的 jQuery 代码片段

    尽管各种 JavaScirpt 框架和库层出不穷,jQuery 仍然是 Web 前端开发中最常用的工具库.今天,向大家分享我觉得在网站开发中10个简单实用的 jQuery 代码片段. 您可能感兴趣的相 ...

  3. 简单实用的PHP防注入类实例

    这篇文章主要介绍了简单实用的PHP防注入类实例,以两个简单的防注入类为例介绍了PHP防注入的原理与技巧,对网站安全建设来说非常具有实用价值,需要的朋友可以参考下   本文实例讲述了简单实用的PHP防注 ...

  4. php简单实用的操作文件工具类(创建、移动、复制、删除)

    php简单实用好用的文件及文件夹复制函数和工具类(创建.移动.复制.删除) function recurse_copy($src,$dst) {  // 原目录,复制到的目录 $dir = opend ...

  5. 基于Bootstrap简单实用的tags标签插件

    http://www.htmleaf.com/jQuery/ jQuery之家 自由分享jQuery.html5和css3的插件库 基于Bootstrap简单实用的tags标签插件

  6. C#_简单实用的翻页

    简单实用的生成翻页HTML辅助类 C# using System.Text; namespace ClassLibrary { /// <summary> /// /// </sum ...

  7. 简单实用的Windows命令(一)

    前几天新买了一台笔记本电脑,使用了一下几个简单的查看电脑配置的命令,觉得非常的不错,在此记录一下 一:运行命令的方式有两种 1:使用快捷键WIN+R,然后在弹出的“运行”对话框中输入对应的命令 2:在 ...

  8. 简单实用的Windows命令(二)

    昨天简单的记录了几个非常简单实用的Windows命令,不过我又想起来还有两个我在实际的工作中也是经常用到的命令——PING和IPCONFIG,不过我在工作中的使用都是非常简单的,用PING命令检测对应 ...

  9. iOS边练边学--多线程介绍、NSThread的简单实用、线程安全以及线程之间的通信

    一.iOS中的多线程 多线程的原理(之前多线程这块没好好学,之前对多线程的理解也是错误的,这里更正,好好学习这块) iOS中多线程的实现方案有以下几种 二.NSThread线程类的简单实用(直接上代码 ...

随机推荐

  1. Asp .net core api+Entity Framework core 实现数据CRUD数据库中(附Git地址)

    最近在学dotNetCore 所以尝试了一下api 这个功能 不多说了大致实现如下 1.用vs2017建立一个Asp.net  Core Web 应用程序 在弹出的对话框中选择 Web API 项目名 ...

  2. axis客户端循环访问webservice的时候只发送了几条数据就断开了的问题

    原因 axis客户端访问webservice默认是使用http1.0版本的,这个版本的http不能保持长连接,应该换成http1.1版本 具体修改步骤: <?xml version=" ...

  3. ElasticSearch中如何让query should等同于filter should

    bool query must The clause (query) must appear in matching documents. should The clause (query) shou ...

  4. JRE,JVM,JDK

    JRE,JVM,JDK的关系.JRE(Java Runtime Environment)java运行环境,我们可以把它看成是一个操作系统.也就是说JRE提供了Java执行的软件平台. JVM (Jav ...

  5. UNITY的UI之Pivot与Anchor区别

    Pivot Rotations, size, and scale modifications occur around the pivot so the position of the pivot a ...

  6. jQuery代码在移动端不运行

    今天写了个html网页发现在iOS系统上边不运行,于是真机连上Sarfari查看报错,于是乎 其实这是由于iOS的安全策略决定的,不允许加载非https的连接 报错:was not allowed t ...

  7. sqlserver镜像相关资料

    本文出处:http://blog.csdn.net/dba_huangzj/article/details/35995083 镜像(Mirroring) SQL Server镜像简介 计划搭建SQL ...

  8. 前台的json数组转化为List<T>集合

    using System;using System.Collections.Generic;using System.Linq;using System.Runtime.Serialization;u ...

  9. Debian/Linux系统安全配置教程

    禁止root SSH登陆 配置SSH Key 配置iptables 当我们安装完Linux系统作为服务器后,总有一系列的安全配置需要进行.特别是当你的服务器Ip是对外网开放的话.全世界有很多不怀好意的 ...

  10. Golang 之 key-value LevelDB

    时常会在应用中用到数据库功能,象 Key-Value 性质的.直接搬个 Redis,Mysql嫌大,好在有 LevelDB,直接编进应用中. 有关什么是 LevelDB 以及 LevelDB 的特性, ...