首页后端开发ASP.NET带你掌握OOM框架AutoMapper使用实例

带你掌握OOM框架AutoMapper使用实例

时间2024-01-30 12:25:03发布访客分类ASP.NET浏览183
导读:收集整理的这篇文章主要介绍了带你掌握OOM框架AutoMapper使用实例,觉得挺不错的,现在分享给大家,也给大家做个参考。本文主要介绍了OOM框架AutoMapPEr的相关知识,本篇的五个实例可以帮你解决常见的基本问题。具有一定的参考价值...
收集整理的这篇文章主要介绍了带你掌握OOM框架AutoMapper使用实例,觉得挺不错的,现在分享给大家,也给大家做个参考。本文主要介绍了OOM框架AutoMapPEr的相关知识,本篇的五个实例可以帮你解决常见的基本问题。具有一定的参考价值,下面跟着小编一起来看下吧

写在前面

OOM顾名思义,Object-Object-Mapping实体间相互转换,AutoMapper也是个老生常谈了,其意义在于帮助你无需手动的转换简单而又麻烦的实体间关系,比如ViewModel和entITy的转换,SeArchModel和Entity的转换,我这篇分享的意义在于,网上大多数的分享都是几年前的,很多方法已经被废弃,到了编译器里会告诉你该方法已经过时,废弃的,不建议使用的,比如Mapper.CreateMap等方法,当然老司机大多数直接就去github看文档了,或者GOOGLE一下就了解了,但是中文资料关于方法废弃后,并没有什么说明了。本篇的五个实例可以帮你解决常见的基本问题.

预备

首先我们预备一些ViewModel和TModel。ViewModel就是你和用户交互的实体。TModel就是你与数据库打交道的实体。

实体展示如下:

TModel有如下三个简单的实体,他们有独立的实体,也有一对多的实体。


public class TAddress{
 public string Country {
     get;
     set;
 }
 public string City {
     get;
     set;
 }
 public string Street {
     get;
     set;
 }
 public string PostCode {
     get;
     set;
 }
 public string CreateTime {
     get;
     set;
 }
 public int CreateUserId {
     get;
     set;
 }
}
    


public class TAuthor {
  public string Name {
     get;
     set;
 }
  public string Description {
     get;
     set;
 }
      public ListTContactInfo>
 ContactInfo {
     get;
     set;
 }
 }
 public class TContactInfo {
 public int Id {
     get;
     set;
 }
 public string Email {
     get;
     set;
 }
 public string blog {
     get;
     set;
 }
 public string Twitter {
     get;
     set;
 }
 }
    

ViewModel如下三个:


public class VM_Address {
 public string Country {
     get;
     set;
 }
 public string City {
     get;
     set;
 }
 public string City2 {
     get;
     set;
 }
 }
 public class VM_Author {
 public string Name {
     get;
     set;
 }
 public string Description {
     get;
     set;
 }
     public ListVM_ContactInfo>
 ContactInfo {
     get;
     set;
 }
 }
 public class VM_ContactInfo {
 public int Id {
     get;
     set;
 }
 public string Email {
     get;
     set;
 }
 public string BLOG {
     get;
     set;
 }
 public string Twitter {
     get;
     set;
 }
 }
    

单个实体转换

单个实体转换的时候,在属性字段名称完全匹配的情况下,你只需指定两个实体间的转换规则,指定source源实体和destination目标实体。那么你应该参照如下实例:


VM_Address dto = new VM_Address  {
  Country = "China",  City = "Beijing"  }
    ;
      Mapper.Initialize(m =>
     m.CreateMapVM_Address, TAddress>
    ());
      TAddress address = Mapper.MapVM_Address, TAddress>
    (dto);
    

请注意在AutoMapper5.x当中,Initialize来初始化你的规则是首选的。

在你指定转换规则后,请使用Map方法,进行转换并输出你的目标实体。还有第一个参数代表SourceModel,第二个参数是DestinationModel.

单个实体不同名属性转换

当你需要对不同名称的字段来进行映射的时候,请注意使用ForMember方法,第一个参数需要你制定所需特殊配置的目标字段,第二个参数你则需要制定你对该字段属性的操作,我选择了它提供的MapFrom方法,意义在于告诉AutoMapper,我需要讲目标实体的City来源 指定为 源实体的City2属性值。


VM_Address dto = new VM_Address  {
  Country = "China",  City2 = "Beijing"  }
    ;
      Mapper.Initialize(m =>
     m.CreateMapVM_Address, TAddress>
    ().ForMember(x =>
     x.City, opt =>
     opt.MapFrom(o =>
     o.City2)));
      TAddress address = Mapper.MapVM_Address, TAddress>
    (dto);
    

集合转换

在集合间转换的时候,你不需要配置目标List与源List对象中的匹配,而只需要配置你泛型对象的映射匹配关系。


  TAddress address = new TAddress {
 Country = "China", City = "Beijing" }
    ;
  TAddress address2 = new TAddress() {
 Country = "USA", City = "New York" }
    ;
      ListTAddress>
     addressList = new ListTAddress>
() {
 address2, address }
    ;
      Mapper.Initialize(m =>
     m.CreateMapTAddress, VM_Address>
    ());
    //这里仅需配置实体间的转换,而不是实体集合的转换  ListVM_Address>
     res = Mapper.MapListTAddress>
    , ListVM_Address>
    >
    (addressList);
    

实体包含不同类型属性转换(忽略属性)

在实体包含不同类型属性的时候,比如TModel1中包含了一个ListTModel> ,而你的ViewModel1中包含了一个ListViewModel> .这个时候你可以选择忽略这个属性


 VAR contacts = new ListTContactInfo>
() {
 new TContactInfo()           {
 Blog = "myblog", Email = "ws@QQ.COM" }
, new TContactInfo() {
 Blog = "myblog", Email = "ll@qq.com" }
 }
    ;
  TAuthor author = new TAuthor() {
 Description = "描述", Name = "吴双", ContactInfo = contacts }
    ;
      Mapper.Initialize(m =>
 {
     m.CreateMapTAuthor, VM_Author>
    ().ForMember(x =>
     x.ContactInfo, opt =>
     opt.Ignore());
 }
    );
           VM_Author dto = Mapper.MapTAuthor, VM_Author>
    (author);
    //这里的Ignore代表配置ContractInfo该属性的操作 为 忽略Ignore,映射时将忽略该属性 由于ListTContactInfo>
    ()和ListVM_ContactInfo>
    () 是不同类型,所以需要配置忽略或者是特殊映射,特殊映射例子看下方

实体包含不同类型属性转换(指定属性Mapfrom)

当然你需要这个属性的时候,你可以不忽略他,而是使用MapFrom来进行特殊的指定,并且在类型不相同的时候,你要指定你两个类型间的映射匹配关系。正如下面实例中的

m.CreateMapTContactInfo, VM_ContactInfo> (); 和
m.CreateMapTAuthor, VM_Author> ().ForMember(x => x.ContactInfo, opt => opt.MapFrom(o => o.ContactInfo));


var contacts = new ListTContactInfo>
()  {
  new TContactInfo() {
 Blog = "myblog", Email = "ws@qq.com" }
,  new TContactInfo() {
 Blog = "myblog", Email = "ll@qq.com" }
  }
    ;
  TAuthor author = new TAuthor() {
 Description = "描述", Name = "吴双", ContactInfo = contacts }
    ;
      Mapper.Initialize(m =>
  {
      m.CreateMapTContactInfo, VM_ContactInfo>
    ();
    //注意 内部不同类型实体转换时必要的  m.CreateMapTAuthor, VM_Author>
    ().ForMember(x =>
     x.ContactInfo, opt =>
     opt.MapFrom(o =>
     o.ContactInfo));
//注意 制定MapFrom是必要的  }
    );
      VM_Author dto = Mapper.MapTAuthor, VM_Author>
    (author);
    

写在最后

在实体转换中,AutoMapper的必要性和实用性已经被你一览无余。

以上就是带你掌握OOM框架AutoMapper使用实例的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

使用"实例

若转载请注明出处: 带你掌握OOM框架AutoMapper使用实例
本文地址: https://pptw.com/jishu/592517.html
JavaScript的变量基础精选(超详细的学习分享!) Asp.net 中用GridView控件的实例教程

游客 回复需填写必要信息