AutoMapper ist eine kleine, einfache Bibliothek, die ein scheinbar komplexes Problem löst: das manuelle Zuordnen eines Objekts zu einem anderen loszuwerden. Solcher Eigenschaftszuweisungscode ist repetitiv und langweilig – AutoMapper ist das Werkzeug, das Objektzuordnungen automatisiert.
Objekt-zu-Objekt-Mapper: Konvertiert ein Eingabeobjekt eines Typs in ein Ausgabeobjekt eines anderen Typs.
AutoMapper verfügt über einen eingebauten Satz von Konventionen. Solange die Zielklasse den Benennungskonventionen folgt, kann die Zuordnung zwischen zwei Typen mit fast keiner Konfiguration abgeschlossen werden.
Zuordnungscode per Hand zu schreiben ist mühsam, und ihn zu testen ist noch mühsamer. AutoMapper bietet eine einfache Typkonfiguration und unterstützt auch Unit-Tests für die Zuordnungslogik.
Installation
Über die NuGet-Paket-Manager-Konsole installieren
PM> Install-Package AutoMapper
Begleitende Erweiterungspakete
- AutoMapper.Data: ADO.NET-Unterstützung, ermöglicht das Zuordnen von
IDataReader - AutoMapper.EF6: Erweiterungsmethoden für EF6, bietet asynchrone
ProjectTo-Projektion - AutoMapper.Collection: Sammlungsäquivalenz-Zuordnung, unterstützt den Vergleich von zwei Sammlungen und den Objektgleichheitsvergleich
- AutoMapper.Collection.EF: Kombiniert mit EF-Primärschlüsseln zur Gleichheitsbewertung, verarbeitet automatisch Hinzufügen, Ändern und Löschen von Sammlungen und ermöglicht die Persistierung von DTO-Sammlungen in Datenbankentitätssammlungen
Traditionelles Beispiel für manuelle Objektzuweisung
Zwei Klassen People (Quelle) und Person (Ziel) mit genau denselben Eigenschaftsnamen
class People
{
public int Age { set; get; }
public string Name { set; get; }
}
class Person
{
public int Age { set; get; }
public string Name { set; get; }
}Code-Sprache: JavaScript (javascript)
Traditioneller Ansatz: Eigenschaften manuell eine nach der anderen zuweisen:
static void Main(string[] args)
{
People p = new People() { Age = 13, Name = "Jack" };
Person person = new Person();
// Jede Eigenschaft manuell kopieren; bei vielen Eigenschaften wird der Code sehr wortreich
person.Name = p.Name;
person.Age = p.Age;
Console.WriteLine(person.Name);
Console.WriteLine(person.Age);
Console.ReadKey();
}Code-Sprache: JavaScript (javascript)
Nachteile: Je mehr Eigenschaften vorhanden sind, desto mehr repetitiver Zuweisungscode; beim Hinzufügen/Ändern von Feldern muss der gesamte Zuweisungscode entsprechend angepasst werden, wobei leicht Fehler passieren und Bugs entstehen.
Was AutoMapper macht: Es ersetzt das manuelle Schreiben von vielen
xxx.Eigenschaft = yyy.Eigenschaft-Anweisungen und kopiert automatisch gleichnamige Eigenschaften gemäß den Konventionen.
Was ist AutoMapper