导航下方文字广告测试导航下方文字广告测试导航下方文字广告测试导航下方文字广告测试导航下方文字广告测试导航下方文字广告测试
网络编程

五步掌握OOM框架AutoMapper基本使用

时间:01-12   作者:YDW   来源:YDW.ORG   阅读:89  
内容摘要:等方法,当然老司机大多数直接就去看文档了,或者一下就了解了,但是中文资料关于方法废弃后,并没有什么说明了。本篇的五个实例可以帮你解决常见的基本问题.那么你应该参照如下实例:x当中,来初始化你的规则是首选的。在你指定转换规则后,请使用Map方法,进行转换并输出你的目标实体。在实体包含不同类型属性的时候,比如中包含了一个List,而你的中包含了一个List.

云端网

写在前面

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

预备

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

实体展示如下:

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

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 List 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; }
 }

如下三个:

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 List 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; }
 }

单个实体转换

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

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

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

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

单个实体不同名属性转换

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

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

集合转换

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

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

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

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

var contacts = new List() { new TContactInfo() 
          { Blog = "myblog", Email = "[email protected]" }, new TContactInfo() { Blog = "myblog", Email = "[email protected]" } };
   TAuthor author = new TAuthor() { Description = "描述", Name = "吴双", ContactInfo = contacts };
   Mapper.Initialize(m => { m.CreateMap().ForMember(x => x.ContactInfo, opt => opt.Ignore()); });
       VM_Author dto = Mapper.Map(author);
//这里的Ignore代表配置ContractInfo该属性的操作 为 忽略Ignore,映射时将忽略该属性 由于List()和List() 是不同类型,所以需要配置忽略或者是特殊映射,特殊映射例子看下方

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

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

m.();和

m.().(x => x., opt => opt.(o => o.));

var contacts = new List()
   {
    new TContactInfo() { Blog = "myblog", Email = "[email protected]" },
    new TContactInfo() { Blog = "myblog", Email = "[email protected]" }
   };
   TAuthor author = new TAuthor() { Description = "描述", Name = "吴双", ContactInfo = contacts };
   Mapper.Initialize(m =>
   {
    m.CreateMap();//注意 内部不同类型实体转换时必要的
    m.CreateMap().ForMember(x => x.ContactInfo, opt => opt.MapFrom(o => o.ContactInfo));//注意 制定MapFrom是必要的
   });
   VM_Author dto = Mapper.Map(author);

写在最后

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

原文链接:

(云端网 )

www.ydw.org


标签:框架  AutoMapper  OOM  
网站版权  8888888888  8888888888