AutoMapper(一)——实现数据契约和实体类之间的转换

 

        以前做过Object到Object的转换方法的封装,底层主要还是靠反射取值赋值+循环来实现的。最近在公司里维护旧系统,这个系统使用了WCF,当时就很好奇他们的数据契约到实体模型的转换时怎么做的,之后查看源码,发现他们居然是一个属性一个属性的赋值过来的,当时就给我雷到了,难道就没有人举得这个地方可以封装起来吗?

 

        据我目前了解,有三种方法可以实现这个实体类到实体类的转换过程,下面来简述下这三种方式。

 

       第一种,也是最简单的一种,是用list自带的转换方法,但是这种方法需要自己定义转换规则,写起来也挺麻烦的,所以当时只做了个小Demo给大家看,也没有提倡使用;

       第二种,就是用反射+泛型封装的方法,但是这种方法只能实现简单属性的转换,对于复杂对象的处理就会出现属性赋值方面的问题;

       第三种方法,就是使用微软封装的AutoMapper。

 

       接下来,本文主要简单介绍下AutoMapper的使用。

 

一,引入

 

    首先找到“程序包管理器控制台”:

 

 

 

    然后输入:

 

       

 

 

之后使用的时候,还有加入如下using:

 

    

using AutoMapper;  //使用autoMapper需要引入此命名空间

 

 

  接下来我们来写两个类,并写出两个类具体是如何转换的:

 

   源类:

 

  

 public  class Student
    {

       public int ID;//ID
       public string Name;//姓名
       public string Sex;//性别

    }

 

   目标类;

 

 

  public class StudentGoal
    {

        public int ID;//ID
        public string Name;//姓名
        public string Sex;//性别


    }

 

 

接下来看看单个实体之间的转换和List之间的转换:

 

   #region 单个实体之间的转换Demo

                //创建映射规则
                Mapper.CreateMap<Student, StudentGoal>();

                //创建一个源实体
                Student StuScource = new Student
                {
                    ID = 1,
                    Name = "lhc",
                    Sex = "girl"
                };

                //进行转换:将源目标转换为目的目标
                var sGoal = Mapper.Map<StudentGoal>(StuScource);

                //输出转换后实体name 
                Console.WriteLine(sGoal.Name);

            #endregion


            #region List之间的转换Demo

                        //创建转换规则
                    Mapper.CreateMap<Student, StudentGoal>();

                    //创建源实体集合
                    List<Student> ListScource = new List<Student>()
                    {
                        new Student() {ID=1,Name ="刘慧超",Sex ="女"},
                        new Student() {ID=2,Name ="小七七",Sex ="女"}
                    };

                    //进行转换
                    List<StudentGoal> ListGoal = Mapper.Map<List<Student>, List<StudentGoal>>(ListScource);


                    //输出目标集合中学生姓名
                    foreach (var stu in ListGoal )
                    {
                        Console.WriteLine(stu.Name);
                    }



            #endregion

 

 

 

    嘿嘿,感觉挺方便的吧~~

   

    这个只是个简单的使用,AutoMapper在实体转换方面做的还是挺成熟的,我们使用的时候,可以在此基础上再进一步封装。

 

posted @ 2015-01-11 19:17  水田如雅  阅读(348)  评论(0编辑  收藏  举报