详解c# AutoMapper使用方式

  

安装方式:使用vs自带的nuget管理工具,搜索AutoMapper,选择第一个安装到你的项目即可。

  

<强>先说说DTO
  

  

<强> DTO是个什么东东?

  

DTO(数据传输对象)就是数据传输对象,说白了就是一个对象,只不过里边全是数据而已。

  

<强>为什么要用dto # 63;

  

1, DTO更注重数据,对领域对象进行合理封装,从而不会将领域对象的行为过分暴露给表现层

  

2, DTO是面向UI的需求而设计的,而领域模型是面向业务而设计的。因此DTO更适合于和表现层的交互,通过DTO我们实现了表现层与领域模型之间的解耦,因此改动领域模型不会影响UI层

  

3, DTO说白了就是数据而已,不包含任何的业务逻辑,属于瘦身型的对象,使用时可以根据不同的UI需求进行灵活的运用

  

我从网上找了一些资料,

  

<强> AutoMapper
  

  

现在我们既然知道了使用DTO的好处,那么我们肯定也想马上使用它,但是这里会牵扯一个问题:怎样实现DTO和领域模型之间的转换?

  

有两个思路,我们要么自己写转换代码,要么使用工具。不过就应用而言,我还是觉得用工具比较简单快捷,那就使用工具吧。其实这样的转换工具很多,不过我还是决定使用AutoMapper,因为它足够轻量级,而且也非常流行,国外的大牛们都使用它。使用AutoMapper可以很方便的实现DTO和领域模型之间的转换,它是一个强大的面向对象映射工具。

  

下载了个演示,然后自己又写了一遍,我把AutoMapper的使用分为两种:

  

1,视图模型与实体的字段名字是一致的,viewmodel的字段可以比实体中的字段少,但是不能多。

  

还有一种情况是:源实体中的字段名字是Getxxx,那么视图模型中对应的字段可以是xxx,也会自动对应赋值,比如我写的演示中源实体中木屐,viewmodel中的;

  

再有一种情况就是实体中的实体赋值,在我写的这个例子中,源实体中包含的实体类字段为子,里面包含的字段名字为时代,

  

那么destmodel中对应的字段名字可以是:亚期,那么automapper就可以自动为你赋值了,大家看最后的运行结果。

  

给大家看下我建的源实体:

        公开课Source1   {   公共字符串名称{设置;得到;}      公共字符串gata{设置;得到;}   公共字符串GetD{设置;得到;}         公共字符串SetB{设置;得到;}      公共字符串c{设置;得到;}      公共SubSource1子{设置;得到;}   }         公开课SubSource1   {   公共字符串年龄{设置;得到;}      }      之前      

还有viewmodel(要转化成为你想要的模型):

        公开课Dest1   {   公共字符串名称{设置;得到;}      公共字符串{集;得到;}      公共字符串C{设置;得到;}      公共字符串亚期{设置;得到;}      D{公共字符串设置;得到;}   }   之前      

我封装的扩展方法:

     ///& lt; summary>///类型映射,默认字段名字一一对应///& lt;/summary>///& lt; typeparam name=" TDestination祝辞转化之后的模型,可以理解为viewmodel///& lt; typeparam name=" TSource祝辞要被转化的实体,Entity///& lt;参数name=霸础痹诳梢允褂谜飧隼┱狗椒ǖ睦嘈?任何引用类型& lt;/param>///& lt; returns>转化之后的实体& lt;/returns>   公共静态TDestination MapTo(这TSource源)   TDestination:类   TSource:类   {   如果(源==null)返回缺省(TDestination);   var配置=new MapperConfiguration (cfg=比;cfg.CreateMap ());   var mapper=config.CreateMapper ();   返回mapper.Map(源);   }      

使用方式:

        新source1 var source1={   Name="源",   子=new SubSource1{年龄=" 25 "},   c=" c ",   gata=癆”,   SetB=" B "   };      var destViewModel=source1.MapTo ();   之前      

运行结果:

  

详解c# AutoMapper使用方式”>,</p>
  <p> 2.视图模型与实体字段名字没有全部对应,只有几个字段的名字和源实体中的字段名字是一样的,其他的字段是通过实体中的几个字段组合或者是格式或者是类型转化而来的,<h2 class=详解c# AutoMapper使用方式