Heim  >  Artikel  >  Backend-Entwicklung  >  Machen Sie sich mit den Anwendungsbeispielen des OOM-Frameworks AutoMapper vertraut

Machen Sie sich mit den Anwendungsbeispielen des OOM-Frameworks AutoMapper vertraut

零下一度
零下一度Original
2017-07-03 17:19:101672Durchsuche

In diesem Artikel werden hauptsächlich die relevanten Kenntnisse des OOMFrameworksAutoMapper vorgestellt. Die fünf Beispiele in diesem Artikel können Ihnen bei der Lösung häufiger Grundprobleme helfen. Es hat einen bestimmten Referenzwert. Schauen wir es uns mit dem Editor unten an

-Object-Mapping Gegenseitige Konvertierung zwischen Entitäten, AutoMapper ist auch ein Klischee. Seine Bedeutung besteht darin, Ihnen bei der Konvertierung einfacher und problematischer Beziehungen zwischen Entitäten zu helfen, z. B. der Konvertierung zwischen ViewModel und Entität sowie der Konvertierung zwischen SearchModel und Die Bedeutung meiner Freigabe liegt darin, dass die meisten Freigaben im Internet schon vor einigen Jahren erfolgt sind und der Compiler Ihnen mitteilt, dass die Methode veraltet, aufgegeben und nicht zu empfehlen ist .CreateMap und andere Methoden Natürlich sind die meisten erfahrenen Treiber einfach zu Github gegangen, um die Dokumentation zu lesen, oder ich habe sie einfach gegoogelt und herausgefunden, aber die chinesischen Informationen haben nichts über die Aufgabe der Methode erklärt. Die fünf Beispiele in diesem Artikel können Ihnen bei der Lösung häufiger Grundprobleme helfen.

Vorbereitung

Zuerst bereiten wir einige ViewModels und TModels vor. ViewModel ist die Entität, mit der Sie mit dem Benutzer interagieren. TModel ist die Entität, die Sie zum Umgang mit der Datenbank verwenden.

Die Entitäten werden wie folgt angezeigt:

TModel verfügt über die folgenden drei einfachen Entitäten. Sie verfügen über unabhängige Entitäten und Eins-zu-viele-Entitäten.


ViewModel lautet wie folgt:

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

Konvertierung einzelner Entitäten


Wenn beim Konvertieren einer einzelnen Entität die

Attribute
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<VM_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; }
 }
Feldnamen genau übereinstimmen, müssen Sie nur die Konvertierungsregeln zwischen den beiden Entitäten angeben Geben Sie die Quellentität und die Zielentität an. Dann sollten Sie sich auf die folgenden Beispiele beziehen:

Bitte beachten Sie, dass in AutoMapper5.x Initialize zum Initialisieren Ihrer Regeln bevorzugt wird.

Nachdem Sie die Konvertierungsregeln festgelegt haben, verwenden Sie bitte die Map-Methode, um Ihre Zielentitäten zu konvertieren und auszugeben. Der erste Parameter stellt SourceModel dar und der zweite Parameter ist DestinationModel.


Konvertierung von Attributen mit unterschiedlichen Namen für eine einzelne Entität
VM_Address dto = new VM_Address
  {
  Country = "China",
  City = "Beijing"
  };
  Mapper.Initialize(m => m.CreateMap<VM_Address, TAddress>());
  TAddress address = Mapper.Map<VM_Address, TAddress>(dto);

Wenn Sie Felder mit unterschiedlichen Namen konvertieren müssen Achten Sie beim Zuordnen darauf, dass Sie die ForMember-Methode verwenden. Für den zweiten Parameter müssen Sie die von mir bereitgestellte MapFrom-Methode angeben Die Bedeutung besteht darin, AutoMapper mitzuteilen, dass ich die City-Quelle der Zielentität als City2-Attributwert der Quellentität angeben muss.

Sammlungskonvertierung


Beim Konvertieren zwischen Sammlungen müssen Sie die Zielliste und die Quellliste nicht konfigurieren

Matching im Objekt
VM_Address dto = new VM_Address
  {
  Country = "China",
  City2 = "Beijing"
  };
  Mapper.Initialize(m => m.CreateMap<VM_Address, TAddress>().ForMember(x => x.City, opt => opt.MapFrom(o => o.City2)));
  TAddress address = Mapper.Map<VM_Address, TAddress>(dto);
, und Sie müssen nur die Mapping-Matching-Beziehung Ihres generischen Objekts konfigurieren.

Entität enthält verschiedene Arten der Attributkonvertierung (Attribute ignorieren)


Wenn die Entität verschiedene Arten von Attributen enthält, Beispielsweise enthält TModel1 eine Listebc26e2d35896972142bded266172216c und Ihr ViewModel1 enthält eine Listec3232db81f7d071f9370eef3d6b791a7. Zu diesem Zeitpunkt können Sie dieses Attribut ignorieren

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

Entität enthält verschiedene Arten der Attributkonvertierung (angegebenes Attribut Mapfrom)


Wenn Sie dieses Attribut benötigen, können Sie es natürlich nicht ignorieren, sondern verwenden Sie MapFrom, um eine spezielle Spezifikation vorzunehmen, und wenn der Typ angegeben ist ist nicht Wenn sie gleich sind, müssen Sie die Zuordnungsbeziehung zwischen Ihren beiden Typen angeben. Wie in den Beispielen unten

 var contacts = new List<TContactInfo>() { 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.CreateMap<TAuthor, VM_Author>().ForMember(x => x.ContactInfo, opt => opt.Ignore()); });
       VM_Author dto = Mapper.Map<TAuthor, VM_Author>(author);
//这里的Ignore代表配置ContractInfo该属性的操作 为 忽略Ignore,映射时将忽略该属性 由于List<TContactInfo>()和List<VM_ContactInfo>() 是不同类型,所以需要配置忽略或者是特殊映射,特殊映射例子看下方
m.CreateMap0eb3c6fb31d7efb9457c116bd799c2ea(); und

m.CreateMap453162b02c806123692898c984a1fdf8().ForMember(x => x.ContactInfo, opt => ; opt.MapFrom(o => o.ContactInfo));


Am Ende schreiben


var contacts = new List<TContactInfo>()
  {
  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.CreateMap<TContactInfo, VM_ContactInfo>();//注意 内部不同类型实体转换时必要的
  m.CreateMap<TAuthor, VM_Author>().ForMember(x => x.ContactInfo, opt => opt.MapFrom(o => o.ContactInfo));//注意 制定MapFrom是必要的
  });
  VM_Author dto = Mapper.Map<TAuthor, VM_Author>(author);
Bei der Entity-Konvertierung haben Sie die Notwendigkeit und Praktikabilität von AutoMapper deutlich erkannt.

Das obige ist der detaillierte Inhalt vonMachen Sie sich mit den Anwendungsbeispielen des OOM-Frameworks AutoMapper vertraut. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn