2010-01-19 10 views
16

Was ist Automapper für? Wie wird es mir helfen, mit meiner Domäne und Controller-Schicht (asp.net mvc)Was ist Automapper für?

+1

Mögliche doppelte/verwandte Frage (aber ein gutes Beispiel enthält) ist

+1

Hier ist eine gute Erklärung: http: // www. kunal-chowdhury.com/2013/01/what-is-automapper-and-how-to-map-objects.html – JoshYates1980

Antwort

28

Vielleicht ein Beispiel wird hier helfen ...

Angenommen, Sie haben eine schön-normalisierte Datenbank-Schema wie folgt aus:

 
Orders  (OrderID, CustomerID, OrderDate) 
Customers (CustomerID, Name) 
OrderDetails (OrderDetID, OrderID, ProductID, Qty) 
Products  (ProductID, ProductName, UnitPrice) 

Und lassen Sie uns sagen, Sie verwenden einen schönen O/R-Mapper, dass Sie wieder ein gut organisiertes Domain-Modell reicht:

 
OrderDetail 
+--ID 
+--Order 
|--+--Date 
|--+--Customer 
|-----+--ID 
|-----+--Name 
+--Product 
|--+--ID 
|--+--Name 
|--+--UnitPrice 
+--Qty 

Jetzt sind Sie eine Anforderung gegeben alles anzuzeigen, die in th bestellt worden ist e letzten Monat. Sie wollen, dass diese zu einem flachen Gitter binden, so dass Sie pflichtschuldigst eine flache Klasse schreiben zu binden:

public class OrderDetailDto 
{ 
    public int ID { get; set; } 
    public DateTime OrderDate { get; set; } 
    public int OrderCustomerID { get; set; } 
    public string OrderCustomerName { get; set; } 
    public int ProductID { get; set; } 
    public string ProductName { get; set; } 
    public Decimal ProductUnitPrice { get; set; } 
    public int Qty { get; set; } 

    public Decimal TotalPrice 
    { 
     get { return ProductUnitPrice * Qty; } 
    } 
} 

Das ziemlich schmerzlos waren so weit, aber was nun? Wie können wir eine Reihe von OrderDetail s in eine Reihe von OrderDetailDto s für die Datenbindung drehen?

Sie könnten einen Konstruktor auf OrderDto, die eine OrderDetail dauert, und schreiben Sie eine große Unordnung von Mapping-Code. Oder Sie haben möglicherweise eine statische Konvertierungsklasse irgendwo. Oder Sie könnten AutoMapper verwenden und stattdessen diesen Code schreiben:

Dort. Wir haben gerade etwas genommen, was sonst ein widerliches Durcheinander von sinnlosem Mapping-Code gewesen wäre, und es in drei Zeilen reduziert (wirklich nur zwei für das tatsächliche Mapping).

Kann das den Zweck erklären?

+0

Fast alles. Wenn du mehr über die Macht von Automapper hinzufügst, bin ich mir sicher, dass die Leute ... –

3

Wenn Sie ein Objekt eines Typs haben und Sie die Eigenschaften eines Objekts eines anderen Typs mit Eigenschaften aus dem ersten Typ, Sie füllen möchten habe zwei Möglichkeiten:

  1. Manuell Code schreiben, um solch ein Mapping zu machen.
  2. Verwenden Sie ein Tool, das dies automatisch für Sie behandelt.

AutoMapper ist ein Beispiel 2.

Die häufigste Verwendung ist Modellen in eine Datentransferobjekte abzuflachen (oder im Allgemeinen über Mapping Schichtgrenzen). Was bei AutoMapper sehr angenehm ist, ist, dass Sie für allgemeine Szenarien keine Konfiguration vornehmen müssen (convention over configuration).

0

Objekte zwischen Ebenen zuordnen. Gutes Beispiel: Here