OOM AutoMapper的简单实用
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的简单实用的更多相关文章
- jQuery的几种简单实用效果
许久未分享博客,或许已生疏. 闲来无事, 分享几个jQuery简单实用的效果案例 不喜勿喷... 1.页面常用的返回顶部 <!DOCTYPE html> <html lang=&qu ...
- 经验分享:10个简单实用的 jQuery 代码片段
尽管各种 JavaScirpt 框架和库层出不穷,jQuery 仍然是 Web 前端开发中最常用的工具库.今天,向大家分享我觉得在网站开发中10个简单实用的 jQuery 代码片段. 您可能感兴趣的相 ...
- 简单实用的PHP防注入类实例
这篇文章主要介绍了简单实用的PHP防注入类实例,以两个简单的防注入类为例介绍了PHP防注入的原理与技巧,对网站安全建设来说非常具有实用价值,需要的朋友可以参考下 本文实例讲述了简单实用的PHP防注 ...
- php简单实用的操作文件工具类(创建、移动、复制、删除)
php简单实用好用的文件及文件夹复制函数和工具类(创建.移动.复制.删除) function recurse_copy($src,$dst) { // 原目录,复制到的目录 $dir = opend ...
- 基于Bootstrap简单实用的tags标签插件
http://www.htmleaf.com/jQuery/ jQuery之家 自由分享jQuery.html5和css3的插件库 基于Bootstrap简单实用的tags标签插件
- C#_简单实用的翻页
简单实用的生成翻页HTML辅助类 C# using System.Text; namespace ClassLibrary { /// <summary> /// /// </sum ...
- 简单实用的Windows命令(一)
前几天新买了一台笔记本电脑,使用了一下几个简单的查看电脑配置的命令,觉得非常的不错,在此记录一下 一:运行命令的方式有两种 1:使用快捷键WIN+R,然后在弹出的“运行”对话框中输入对应的命令 2:在 ...
- 简单实用的Windows命令(二)
昨天简单的记录了几个非常简单实用的Windows命令,不过我又想起来还有两个我在实际的工作中也是经常用到的命令——PING和IPCONFIG,不过我在工作中的使用都是非常简单的,用PING命令检测对应 ...
- iOS边练边学--多线程介绍、NSThread的简单实用、线程安全以及线程之间的通信
一.iOS中的多线程 多线程的原理(之前多线程这块没好好学,之前对多线程的理解也是错误的,这里更正,好好学习这块) iOS中多线程的实现方案有以下几种 二.NSThread线程类的简单实用(直接上代码 ...
随机推荐
- AMF_OBJECT 数据结构浅析
组织的比较散,主要是标记一下有关 AMF_OBJECT 数据组织结构.其标识嵌套结束则为 0x 00 00 09 原始数据结构已知: key=“0123456”: Value 的值是一个结构体如下: ...
- tornado异步编程
说明 以下的例子都有2个url,一个是耗时的请求,一个是可以立刻返回的请求,,我们希望的是访问立刻返回结果的请求不会被其他耗时请求影响 非异步处理 现在我们请求sleep然后同时请求justnow,发 ...
- UVALIVE 4556 The Next Permutation
4556 The Next PermutationFor this problem, you will write a program that takes a (possibly long) str ...
- 导入本体到Jena TDB数据库
本体的存储方法或称本体持久化,大致分为基于内存的方式.基于文件的方式.基于数据库的方式和专门的管理工具方式4种(傅柱等, 2013).其中,基于数据库的方式又有基于关系数据库.基于面向对象数据库.基于 ...
- 取消Eclipse的js校验功能
1 window>>preferences>>javascript>>validator>>Error/warnings 去掉 Enable Javas ...
- 并发编程和MySQL总结
1️⃣ 并发编程主要内容: 操作系统工作原理介绍.线程.进程演化史.特点.区别.互斥锁.信号.事件.join.GIL.进程间通信.管道.队列. 生产者消费者模型.异步模型.IO多路复用模型.sele ...
- 【转】H5+css布局+js+前端和移动端ui+其他汇总
无意间发现一个博客比较好,由于内容比较多,就把链接转过来,先保存着方便看的时候看. 感谢博主“张果” +++++++++++++++++++++++++++++++++++++++++++++++++ ...
- CloudStack 注册模板脚本分析
注册系统虚拟机模板 /usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt 内容如下: usage ...
- c++ std::unordered_set
std::unordered_set template < class Key, // unordered_set::key_type/value_type class Hash = hash& ...
- [C++] NEW Advanced Usage
NEW Advanced Usage 将分配的内存限定在特定的一块区域 #include<iostream> #include<new> ); ); }; using name ...