前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EmitMapper的使用

EmitMapper的使用

作者头像
跟着阿笨一起玩NET
发布2018-09-20 15:05:44
1.1K0
发布2018-09-20 15:05:44
举报

转载:https://cloud.tencent.com/developer/article/1344642

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

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

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

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

代码语言:javascript
复制
//=>一、(默认映射配置器)属性名称一样的情况;类型可以不一样,但基元素类型转换可以进行ToString。(注意是属性名称是区分大小写)
            //=》写法一
            //ObjectsMapper<Sourse, Dest> mapper =
            //ObjectMapperManager.DefaultInstance.GetMapper<Sourse, Dest>();
            //Dest dst = mapper.Map(src);

            //=》简写二
            Dest dst = null;
            dst = ObjectMapperManager.DefaultInstance.GetMapper<Sourse, Dest>().Map(src, dst);

            //=》二、自定义映射配置器
            ObjectsMapper<Sourse, Dest> mapper1 =
                new ObjectMapperManager().GetMapper<Sourse, Dest>
                (
                 new DefaultMapConfig()
                .IgnoreMembers<Sourse, Dest>(new string[] { "A" })
                .NullSubstitution<decimal?, decimal>((value) => { return -1M; }) //如果不是语句块,则可以省略return;如果是加上return,则需要加上花括号 { return }
                //.NullSubstitution<decimal?, decimal>((value) =>  -1M)
                .ConvertUsing<Inner, Inner2>(value => new Inner2 { D12 = value.D1, D22 = value.D2 })
                //.ConvertUsing<Inner, Inner2>(value => { return new Inner2 { D12 = value.D1, D22 = value.D2 }; })
                //=>方法体的写法
                //.PostProcess<Dest>((value, state) =>
                //{
                //    value.F = "nothing";
                //    value.A = 111;
                //    return value;
                //})
                //);
                //=>return的写法
                //.PostProcess<Dest>((value, state) =>
                //{
                //    return new Dest
                //    {
                //        F = "nothing",
                //        A = 111,
                //    };
                //})
                //.PostProcess<Dest>((value, state) =>
                //    new Dest
                //    {
                //        F = "noting",
                //        A = 111,
                //    })
                //);
                .PostProcess<Dest>((Dest value, object state) =>
                    new Dest
                    {
                        F = "noting",
                        A = 111,
                    })
                );
            Dest dst1 = mapper1.Map(src);

            //=>其他
            //=>委托写法
            //EmitMapper.MappingConfiguration.MappingOperations.ValuesPostProcessor<Dest> ValuesPostProcessor1 = delegate(Dest dest1, object state) { return new Dest { }; };
            EmitMapper.MappingConfiguration.MappingOperations.ValuesPostProcessor<Dest> ValuesPostProcessor2 = (d, s) => { return new Dest { }; };

EmitMapper的使用小结(很不错)

http://www.cnblogs.com/ariklee/p/3833598.html

自己总结的Demo下载:

http://files.cnblogs.com/files/zfanlong1314/EmitMapperComponent.zip

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-04-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档