• AutoMapper用法一瞥


    前段时候做个小项目用到了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的标准写法,我们在使用的时候可以这样写:

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

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

  • 相关阅读:
    django 定时任务 django-crontab 的使用
    Django中更新多个对象数据与删除对象的方法
    Django复制记录的方法
    Python中关于日期的计算总结
    django中添加日志功能
    Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
    根据后端传的时间前端js进行倒计时
    输入pip命令报错:from pip import main ImportError: cannot import name 'main'
    操作uwsgi命令
    关于linux下安装mysqlclient报 Failed building wheel for mysqlclient问题
  • 原文地址:https://www.cnblogs.com/xujie520/p/5145376.html
Copyright © 2020-2023  润新知