• EmitMapper的使用


    转载:http://www.cnblogs.com/aaa6818162/archive/2012/06/21/2557879.html

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

          EmitMapper映射效率比较高,接近硬编码。EmitMapper采用emit方式在运行时动态生成IL,而其他映射框架多是采用反射机制。此外EmitMapper最大限度地减少了拆箱装箱操作和映射过程中的额外的调用。
          EmitMapper支持.net的所有平台:Framework 3.5、Microsoft Silverlight 3、Mono。
     
          EmitMapper的使用非常简单,不需要指定任何的映射策略。系统会采用默认的映射配置器DefaultMapConfig完成映射操作。
     
    //=>一、(默认映射配置器)属性名称一样的情况;类型可以不一样,但基元素类型转换可以进行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 { }; };
    View Code

    EmitMapper的使用小结(很不错)

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

    自己总结的Demo下载:

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

    Customization using default configurator

    Customization overview
    Custom converters
    Custom converters_for_generics
    Null substitution
    Ignoring members
    Custom constructors
    Shallow and_deep_mapping
    Names matching
    Post processing

  • 相关阅读:
    java笔记之连接数据库
    关于数据集合的使用
    ubuntu下安装MySql
    Android笔记之Broadcast广播机制
    InputStream
    Android笔记之Toast
    jqGrid 复选框实现单选
    layer弹出框包含页面
    input不显示边框
    UUID
  • 原文地址:https://www.cnblogs.com/51net/p/4447305.html
Copyright © 2020-2023  润新知