文档章节

AutoMapper

龙马行空
 龙马行空
发布于 2014/06/13 10:28
字数 588
阅读 225
收藏 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、福利时间






© 著作权归作者所有

共有 人打赏支持
龙马行空
粉丝 389
博文 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

没有更多内容

加载失败,请刷新页面

加载更多

原型模式

1、原型模式-定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 克隆(浅度克隆->拷贝值类型或者引用,深度克隆->创建新的对象,开辟新的内存) 例如客户端知道抽象Pro...

阿元
今天
13
0
awk命令扩展使用操作

awk 中使用外部shell变量 示例1 [root@centos01 t1022]# A=888[root@centos01 t1022]# echo "" | awk -v GET_A=$A '{print GET_A}'888[root@centos01 t1022]# echo "aaaaaaaaaaaaa" | aw......

野雪球
今天
15
0
深入解析MySQL视图VIEW

Q:什么是视图?视图是干什么用的? A:视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。作为一个select语句保存在数据字典中的。   通过视图,可以展现基表的部分数据;...

IT--小哥
今天
21
0
虚拟机学习之二:垃圾收集器和内存分配策略

1.对象是否可回收 1.1引用计数算法 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时候计数器值为0的对象就是不可能...

贾峰uk
今天
13
0
smart-doc功能使用介绍

smart-doc从8月份底开始开源发布到目前为止已经迭代了几个版本。在这里非常感谢那些敢于用smart-doc去做尝试并积极提出建议的社区用户。因此决定在本博客中重要说明下smart-doc的功能,包括使...

上官胡闹
昨天
24
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部