文档章节

AutoMapper

龙马行空
 龙马行空
发布于 2014/06/13 10:28
字数 588
阅读 224
收藏 1

1、简单入门使用介绍

2、实际应用

(1)添加文件并引入程序集

在App_Start中添加配置文件

(2)配置

在这里将所有的配置都配置在这里,包含ui-bll-dao各层之间的转换

namespace PCITC.MES.EAM.UI.App_Start
{
    public class MapperConfig
    {
        public static void RegisterMappers()
        {
            Mapper.Reset();
            Mapper.Initialize(cfg =>
            {
                cfg.AddProfile(new ViewModelToEntityProfile());
                cfg.AddProfile(new EntityToViewModelProfile());
                cfg.AddProfile(new EntityToPocoProfile());
                cfg.AddProfile(new PocoToEntityProfile());
            });
        }
    }
    
    public class ViewModelToEntityProfile : Profile
    {
        protected override void Configure()
        {
            #region 报表管理-开停机记录
            Mapper.CreateMap<Areas.ReportForms.Models.StopRecording, Bll.Entities.StopRecording>();
            Mapper.CreateMap<Areas.ReportForms.Models.StopRecordingQueryParameter, Bll.Entities.StopRecordingQueryParameter>();
            #endregion 
        }
    }

    public class EntityToViewModelProfile : Profile
    {
        protected override void Configure()
        {
            #region 报表管理-开停机记录
            Mapper.CreateMap<Bll.Entities.StopRecording, Areas.ReportForms.Models.StopRecording>();
            #endregion 
        }
    }

    public class EntityToPocoProfile : Profile
    {
        protected override void Configure()
        {
            #region 报表管理-开停机记录
            Mapper.CreateMap<Bll.Entities.StopRecording, Poco.ReportForms.StopRecording>();
            Mapper.CreateMap<Bll.Entities.StopRecordingQueryParameter, DAL.ReportForms.StopRecordingQueryParameter>();
            #endregion 
        }
    }

    public class PocoToEntityProfile : Profile
    {
        protected override void Configure()
        {
            #region 维修管理-类别参数文件关系配置
            Mapper.CreateMap<Poco.OperManagement.ParaFileRelationship, Bll.Entities.ParaFileRelationship>()
                .ForMember(dto => dto.CatalogName, conf => conf.MapFrom(ol => ol.OperFailureObjCatalog.FailureObjName))
                .ForMember(dto => dto.CatalogCode, conf => conf.MapFrom(ol => ol.OperFailureObjCatalog.FailureObjCode))
                .ForMember(dto => dto.GroupName, conf => conf.MapFrom(ol => ol.OperFailureObjGroup.FailureObjName))
                .ForMember(dto => dto.GroupCode, conf => conf.MapFrom(ol => ol.OperFailureObjGroup.FailureObjCode))
                .ForMember(dto => dto.Code, conf => conf.MapFrom(ol => ol.OperFailureObjCode.FailureObjCode))
                .ForMember(dto => dto.CodeName, conf => conf.MapFrom(ol => ol.OperFailureObjCode.FailureObjName));
            #endregion

            #region 报表管理-开停机记录
            Mapper.CreateMap<Poco.ReportForms.StopRecording, Bll.Entities.StopRecording>();
            #endregion 
        }        
    }
}

        注意1Mapper.Initialize在项目中只能用一次,否则会把所有配置覆盖。 点此有参考

        注意2:IDE有些时候不能识别配置的东西,底下会有红线等,但那只是IDE的问题,编译不会有问题。

        注意3方法中的参数方向问题

        注意4:不管哪种架构的各个层都是要在这里配置映射,所以别嫌麻烦,写全了程序集引用,比                                                       如:Poco.ReportForms.StopRecording,Bll.Entities.StopRecording

(3)在Global中启动

namespace PCITC.MES.EAM.Wcf
{
    public class Global : System.Web.HttpApplication
    {

        protected void Application_Start(object sender, EventArgs e)
        {
            MapperConfig.RegisterMappers();
        }
    }
}

(4)创建转换方法中的使用

using System.Collections.Generic;
using AutoMapper;

namespace PCITC.MES.EAM.Bll.Entities
{
    public static class SealedManagementEntityBuilder
    {

        /// <summary>
        /// pocoModel转bllModel
        /// </summary>
        /// <param name="pocoModel"></param>
        /// <returns></returns>
        public static SealedManagement BuildSealedManagementToBllModel(Poco.ProfessionalManagement.SealedManagement pocoModel)
        {
            // 验证类型映射是否正确
            //Mapper.AssertConfigurationIsValid();
            return Mapper.Map<Poco.ProfessionalManagement.SealedManagement, SealedManagement>(pocoModel);
        }

        /// <summary>
        /// bllModel转pocoModel
        /// </summary>
        /// <param name="bllModel"></param>
        /// <returns></returns>
        public static Poco.ProfessionalManagement.SealedManagement BuildSealedManagementToPocoModel(SealedManagement bllModel)
        {
            return Mapper.Map<SealedManagement, Poco.ProfessionalManagement.SealedManagement>(bllModel);
        }

        /// <summary>
        /// pocoModels转bllModels
        /// </summary>
        /// <param name="pocoModels"></param>
        /// <returns></returns>
        public static IList<SealedManagement> BuildSealedManagementToBllModelManyToMany(IList<Poco.ProfessionalManagement.SealedManagement> pocoModels)
        {
            return Mapper.Map<IList<Poco.ProfessionalManagement.SealedManagement>, IList<SealedManagement>>(pocoModels);
        }

        /// <summary>
        /// bllModels转pocoModels
        /// </summary>
        /// <param name="bllModels"></param>
        /// <returns></returns>
        public static IList<Poco.ProfessionalManagement.SealedManagement> BuildSealedManagementToPocoModelManyToMany(IList<SealedManagement> bllModels)
        {
            return Mapper.Map<IList<SealedManagement>, IList<Poco.ProfessionalManagement.SealedManagement>>(bllModels);
        }
    }
}

3、推荐资料

        当然automapper还有很多东西,这个需要大家去官网学习了。

        http://www.tuicool.com/articles/qq2q6fA

        http://www.cnblogs.com/xishuai/category/577114.html

http://www.cnblogs.com/happyframework/archive/2013/06/06/3120805.html这哥们博客什么都写,大家看看

4、福利时间






© 著作权归作者所有

共有 人打赏支持
龙马行空
粉丝 386
博文 127
码字总数 119251
作品 0
房山
前端工程师
加载中

评论(3)

netkiller-
netkiller-

引用来自“龙马行空”的评论

引用来自“neo-chen”的评论

福利不错

都是我阅人无数,精挑细选的28
同道中人,彼此彼此
龙马行空
龙马行空

引用来自“neo-chen”的评论

福利不错

都是我阅人无数,精挑细选的28
netkiller-
netkiller-
福利不错
ASP.NET.Core中使用AutoMapper

首先需要在NuGet中引用AutoMapper的类库 install-package AutoMapperinstall-package AutoMapper.Extensions.Microsoft.DependencyInjection 然后创建好要进行转换的类 public class User{ }......

莫问今朝乄
2017/12/22
0
0
C# 对象映射研究(表达式树)

前言 上篇简单实现了对象映射,针对数组,集合,嵌套类并没有给出实现,这一篇继续完善细节。 开源对象映射类库映射分析 1.AutoMapper 实现原理:主要通过表达式树Api 实现对象映射 优点: .n...

07/18
0
0
权限管理系统 - OpenAuth.Net

项目采用经典DDD架构(用沃恩.弗农大神的话,其实这是DDD-Lite)思想进行开发,简洁而不简单,实用至上,并且所写每一行代码都经过深思熟虑,符合SOLID规则! 当然,如果你想学习完整的DDD框架...

李玉宝
2015/12/04
0
43
MEDIATR 一个低调的中介者类库

微软官方的开源项目eShopOnContainers中,用到了一个实现中介者模式的类库:MediatR。这个类库的作者叫Jimmy Bogard,在其gtihub主页上可以看到,注明的对象映射组件AutoMapper 就是他写的。...

dotNET跨平台
04/20
0
0
如何使用ASP.NET Core、EF Core、ABP(ASP.NET Boilerplate)创建分层的Web应用程序(第二部分)

在上一篇如何使用ASP.NET Core、EF Core、ABP(ASP.NET Boilerplate)创建分层的Web应用程序(第一部分)我们介绍了第一部分,这一篇是接着上一篇的内容写的。 创建Person实体 添加一个Person实...

Freda.Han
08/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

RabbitMQ在CentOS环境安装

1.废话不多说准备一台虚拟机,系统为centos,我这里使用的系统版本如下图所示:

凌晨一点
57分钟前
0
0
线程池相关

在java.util.concurrent包下,提供了一系列与线程池相关的类。 使用线程池的好处 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗; 提高响应速度。当任务到达时,任务...

edwardGe
59分钟前
0
0
学习大数据这三个关键技术是一定要掌握!

大数据时代全面来临,大数据、人工智能等技术引领科技创新潮流,获得国家政策大力支持,前景广阔。学习大数据技术的人自然是络绎不绝, 学习大数据虽然是一个趋势,但也要注意大数据培训课程...

董黎明
今天
0
0
jetbrains 上传代码到github

设置中找github 获取token 验证是否成功 测试git 生成key,一路回车即可 ssh-keygen -t rsa -C “youremail@example.com” 打开pub复制key,需要再次输入一次密码 验证是否成功,输入yes即可...

阿豪boy
今天
0
0
分布式服务框架(拾遗)

前言 现在的大部分工程都已经是基于分布式架构来处理。所以这里对分布式框架做一个简单的总结 常用的RPC框架 RPC框架原理 RPC(Remote Procedure Call,远程过程调用)一般用来实现部署在不同...

kukudeku
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部