开源实体映射框架EmitMapper介绍

开源实体映射框架EmitMapper介绍

  • 综述

EmitMapper是一个开源实体映射框架,地址:http://emitmapper.codeplex.com/

EmitMapper映射效率比较高,接近硬编码。EmitMapper采用emit方式在运行时动态生成IL,而其他映射框架多是采用反射机制。此外EmitMapper最大限度地减少了拆箱装箱操作和映射过程中的额外的调用。

EmitMapper支持.net的所有平台:Framework 3.5、Microsoft Silverlight 3、Mono。

EmitMapper的使用非常简单,不需要指定任何的映射策略。系统会采用默认的映射配置器DefaultMapConfig完成映射操作。

 1     public class Sourse 2     { 3         public int A; 4         public decimal? B; 5         public string C; 6         public Inner D; 7         public string E; 8     } 9 10     public class Dest11     {12         public int? A;13         public decimal B;14         public DateTime C;15         public Inner D;16         public string F;17     }18 19     public class Inner20     {21         public long D1;22         public Guid D2;23     }24 25     Sourse src = new Sourse26     {27         A = 1,28         B = 0M,29         C = "2011/9/21 0:00:00",30         D = new Inner31         {32             D2 = Guid.NewGuid()33         },34         E = "test"35     };36 37     ObjectsMapper<Sourse, Dest> mapper = 38         ObjectMapperManager.DefaultInstance.GetMapper<Sourse, Dest>();39 Dest dst = mapper.Map(src);40 41     Assert.AreEqual<string>(dst.B.ToString(), src.B);42     Assert.AreEqual<long>(dst.C.C1, 0L);43     Assert.AreEqual<Guid>(dst.C.C2, src.C.C2);44     Assert.IsNull(dst.E);
  • 默认映射配置器

默认的映射配置器能自动转换以下几种类型:

任何类型到string类型使用ToString()方法;

可以使用System.Convert类转换的原始类型;

可空类型、枚举类型、各种集合类型、结构与类;

复杂的嵌套类型采用递归方式转换;

如果默认的转换满足不了需求,默认的映射配置器还允许指定命名约定,自定义构造函数,自定义转换器,忽略成员等。


支持的方法


描述


ConvertUsing


为指定的成员提供自定义的转换逻辑


ConvertGeneric


为指定的泛型类型成员提供自定义的转换逻辑


ConstructBy


为目标对象使用指定的构造函数替代默认构造函数


NullSubstitution


当源对象中指定的成员在为null时,给目标对象的成员赋值


IgnoreMembers


忽略指定成员的映射


PostProcess


在映射完成后执行指定的方法


ShallowMap


指定的成员采用浅拷贝方式映射


DeepMap


指定的成员采用深拷贝方式映射


MatchMembers


如果成员名称的映射不采用精确匹配,可以指定具体的映射逻辑

选择几个方法简单示例如下:

 1     public class Sourse 2     { 3         public int A; 4         public decimal? B; 5         public string C; 6         public Inner D; 7         public string E; 8     } 9 10     public class Dest11     {12         public int? A;13         public decimal B;14         public DateTime C;15         public Inner2 D;16         public string F;17     }18 19     public class Inner20     {21         public long D1;22         public Guid D2;23     }24 25     public class Inner226     {27         public long D12;28         public Guid D22;29     }30 31     ObjectsMapper<Sourse, Dest> mapper1 = 32         new ObjectMapperManager().GetMapper<Sourse, Dest>(33             new DefaultMapConfig()34             .IgnoreMembers<Sourse, Dest>(new string[] { "A" })35             .NullSubstitution<decimal?, decimal>((value) => -1M)36             .ConvertUsing<Inner, Inner2>(value => new Inner2 { D12 = value.D1, D22 = value.D2 })37             .PostProcess<Dest>((value, state) => { value.F = "nothing"; return value; })38             );39     Dest dst = mapper1.Map(src);40 41     Assert.IsNull(dst.A);42     Assert.AreEqual<decimal>(dst.B, -1M);43     Assert.AreEqual<Guid>(dst.D.D22, src.D.D2);44     Assert.AreEqual<string>(dst.F, "nothing");
  • 自定义映射配置器

当然EmitMapper是个非常灵活的框架,也可以自定义映射配置器,实现定制的映射操作。

自定义的映射配置器可以继承自DefaultMapConfig或CustomMapConfig,利用基类的一些功能实现定制的映射,也可以继承自接口ImappingConfigurator,完全从头实现。

比如可以实现从HTTP中通过Post方式提交的Form数据到具体业务实体类的映射,下面通过继承ImappingConfigurator来实现。

自定义映射配置器

转自 http://www.cnblogs.com/wuhong/archive/2011/09/21/2184313.html

时间: 2024-10-15 21:18:38

开源实体映射框架EmitMapper介绍的相关文章

Hibernate (开放源代码的对象关系映射框架)介绍

Hibernate (开放源代码的对象关系映射框架) 编辑 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hiberna

开源图计算框架GraphLab介绍

GraphLab介绍 GraphLab 是由CMU(卡内基梅隆大学)的Select 实验室在2010 年提出的一个基于图像处理模型的开源图计算框架,框架使用C++语言开发实现.该框架是面向机器学习(ML)的流处理并行计算框架,可以运行在多处理机的单机系统.集群或是亚马逊的EC2 等多种环境下.框架的设计目标是,像MapReduce一样高度抽象,可以高效执行与机器学习相关的.具有稀疏的计算依赖特性的迭代性算法,并且保证计算过程中数据的高度一致性和高效的并行计算性能.该框架最初是为处理大规模机器学习

EntityFrameWork实体映射

在ORM的实体框架中多为继承,关联等 在Hibernater中关联的实体,需要配置 xml文件来维护不同实体的关系 而在EF中这这是通过可视化的图形操作来控制之间的关系的:如下图 关联映射 如已经通过PowerDeesigner画好了实体间的关系 ,实体关系在转成物理模型导入数据库.通过EF的model模型从数据库导入图2 选择好数据库,选择好实体框架,注意这里的框架是和Framework对应的 重点来了 我们看到 有(在模型中包括外键列)若选择该列,这就会在有关联关系的实体中添加外键列.则在添

001---Hibernate简介( 开源O/R映射框架)

001---Hibernate简介(开源O/R映射框架) ORM(Object Relational Mapping)---是一种为了解决面向对象与关系型数据库存在的互不匹配的现象的技术.简单说:ORM是通过使用描述对象和数据库之间映射的元数据,将Java程序中的对象自动持久化到关系数据中.本质上就是将数据从一种形式转换到另外一种形式. 分层后,上层不需要知道下层是如何做了. 分层后,不可以循环依赖,一般是单向依赖. Hibernate的创始人:Gavin King Hibernate做什么:

.NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器学习算法以及提供计算机视频.音频.信号处理以及统计应用相关的解决方案.该项目使用C#语言编写,项目主页:http://accord-framework.net/ 说明:该文章只是一个基本介绍,主要内容是翻译的官方文档和介绍,部分英文表述个人能力有限,不太熟悉,所以直接照搬原文,有比较确切的知道中文名

ActiveMQ:JMS开源框架入门介绍

介绍基本的JMS概念与开源的JMS框架ActiveMQ应用,内容涵盖一下几点: 基本的JMS概念 JMS的消息模式 介绍ActiveMQ 一个基于ActiveMQ的JMS例子程序 一:JMS基本概念 1. JMS的目标 为企业级的应用提供一种智能的消息系统,JMS定义了一整套的企业级的消息概念与工具,尽可能最小化的Java语言概念去构建最大化企业消息应用.统一已经存在的企业级消息系统功能. 2. 提供者 JMS提供者是指那些完全完成JMS功能与管理功能的JMS消息厂商,理论上JMS提供者完成.

006开源O/R映射框架内容回顾

Hibernate是一个O/R映射框架(也称为ORM) 从ORM词来看,O---Object(对象模型):R--- Relational(关联模型),可以做对象和关联的一种映射,当然这只是部分功能,一个完善ORM框架应该具有更多的功能:如HQL相关的查询语句.提供缓存机制(一级缓存.二级缓存). Java开发数据库时,使用JDBC,但是需要编写大量相同的代码,这样不便提高生产效率,而hibernate可以让你不能编写大量的相同的代码.从而提高生产效率.另一方面,hibernate可以让我们更面对

iOS开源项目MobileProject功能点介绍

一:MobileProject简介 MobileProject项目是一个以MVC模式搭建的开源功能集合,基于Objective-C上面进行编写,意在解决新项目对于常见功能模块的重复开发,MobileProject对于项目的搭建也进行很明确的划分,各个模块职责也比较明确,MobileProject也引入的一些常用第三方插件.宏定义.工具帮助类等:整个项目也是在不断更新跟维护中,功能点也会不断更新:代码支持iOS7以后版本: 二:项目框架内容 三:功能点介绍 1:JSPatch热更新功能 相信关于J

DICOM:开源DICOM服务框架DCM4CHE 构建

背景: 前一篇博文DICOM:开源DICOM服务框架DCM4CHE 安装中介绍了一款开源DICOM服务框架DCM4CHE,对于开源项目学习的流程是先下载二进制可执行包安装,然后使用测试.在熟悉了大致的功能服务后,从官网下载源代码进行本地构建(Build),进而从根本上了解开源项目的底层框架设计,为后续修复.扩展做准备.本博文是继DCM4CHE安装后的续篇,讲解如何在本地构建DCM4CHE开源项目,文中尽量做到全面,但是由于刚开始接触J2EE领域,且多半都是自学,因此博文中还留有部分未解问题,如有