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>(); } }
View Code

静态映射使用:

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

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

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

三.经验之谈:

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

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

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

四.错误现象:

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

五.解决方案:

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

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

猜你喜欢

转载自www.cnblogs.com/zlp520/p/9378435.html
OOM