Zum Fußzeileninhalt springen
.NET HILFE

Automapper C# (Wie es für Entwickler funktioniert)

Automapper ist eine vielseitige und leistungsstarke Bibliothek in C#, die entwickelt wurde, um die Objekt-zu-Objekt-Abbildung zu erleichtern und den Datentransfer zwischen komplexen Objektmodellen einfacher und wartbarer zu machen. In diesem Artikel werden wir untersuchen, wie Automapper effizient Eigenschaften abbilden, komplexe Objektmodelle flatten kann und mit verschiedenen Objekttypen wie Benutzerdomänenobjekten und Datenübertragungsobjekten arbeiten kann.

Einführung in Automapper

Automapper in C# ist ein Objekt-Objekt-Mapping-Tool, das die Umwandlung und den Datentransfer zwischen unterschiedlichen Objekttypen vereinfacht. Dies ist besonders nützlich in Szenarien, die Datenentitäten und ihre Umwandlung in Datenübertragungsobjekte (DTOs) beinhalten.

Hauptmerkmale von Automapper

  • Vereinfachung des Codes: Automapper reduziert drastisch den Bedarf an manuellem Code, indem es die Zuordnung von Eigenschaften automatisiert, Fehler verhindert und Zeit spart.
  • Flexibilität in Mapping-Konfigurationen: Automapper erlaubt eine detaillierte Anpassung der Mapping-Konfigurationen und deckt ein breites Spektrum an Mapping-Szenarien ab.
  • Leistungsfähigkeit: Die Bibliothek ist darauf ausgelegt, große und komplexe Objektmodelle ohne signifikante Leistungseinbußen zu handhaben.

Einstieg mit Automapper

Um Automapper zu nutzen, muss es zuerst über die Paketmanager-Konsole installiert werden, eine Komponente der Entwicklungsumgebung, die das Management von Softwarepaketen erleichtert.

Installation über die Paketmanager-Konsole

Sie können Automapper in Ihrem Projekt ganz einfach installieren, indem Sie einen einfachen Befehl in Ihrer Paketmanager-Konsole ausführen:

Install-Package AutoMapper

Einrichten der grundlegenden Mapping-Konfiguration

Der grundlegende Schritt bei der Verwendung von Automapper besteht darin, die Mapping-Konfiguration zu definieren. Dies beinhaltet die Spezifizierung, wie die Eingabeobjekteigenschaften (Quelle) auf die Ausgabeobjekteigenschaften (Ziel) übertragen werden sollen.

var config = new MapperConfiguration(cfg => 
{
    cfg.CreateMap<SourceClass, DestinationClass>();
});
IMapper mapper = config.CreateMapper();
var config = new MapperConfiguration(cfg => 
{
    cfg.CreateMap<SourceClass, DestinationClass>();
});
IMapper mapper = config.CreateMapper();
Dim config = New MapperConfiguration(Sub(cfg)
	cfg.CreateMap(Of SourceClass, DestinationClass)()
End Sub)
Dim mapper As IMapper = config.CreateMapper()
$vbLabelText   $csharpLabel
  • Im obigen Beispiel wird eine Mapping-Konfiguration erstellt, um Eigenschaften von SourceClass auf DestinationClass abzubilden.
  • Anschließend wird eine Instanz von IMapper unter Verwendung dieser Konfiguration erstellt.

Fortgeschrittene Mapping-Techniken mit Automapper

Die Fähigkeiten von Automapper gehen weit über das einfache Abbilden von Eigenschaft-zu-Eigenschaft hinaus. Es kann auch komplexere Szenarien geschickt handhaben.

Komplexe Objektmodelle abflachen

Eine der Stärken von Automapper besteht in seiner Fähigkeit, komplexe Objektmodelle zu flatten. Diese Funktion ist besonders nützlich beim Umgang mit verschachtelten Objekten und ermöglicht die Zuordnung dieser verschachtelten Eigenschaften zu einer flachen Zielklassenstruktur.

Vielseitige Objekttypverarbeitung

Automapper kann verschiedene Objekttypen effizient abbilden, einschließlich Benutzerdomänenobjekten, DTOs und sogar View-Modellen, und bietet somit eine vielseitige Lösung für unterschiedliche Datenübertragungsbedürfnisse.

Praktische Beispiele für die Verwendung

Um die Nützlichkeit von Automapper besser zu verstehen, lassen Sie uns einige praktische Beispiele erkunden.

Beispiel 1: Einfaches Mapping

Betrachten Sie ein Szenario, in dem wir Eigenschaften von einer Benutzerentität auf ein Benutzer-DTO abbilden müssen:

public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}

public class UserDTO
{
    public string FullName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}

// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<User, UserDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.FirstName + " " + src.LastName));
});
IMapper mapper = config.CreateMapper();
User user = new User { FirstName = "John", LastName = "Doe", Address = "123 Street", City = "CityName" };
UserDTO userDto = mapper.Map<UserDTO>(user);
public class User
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}

public class UserDTO
{
    public string FullName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
}

// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<User, UserDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.FirstName + " " + src.LastName));
});
IMapper mapper = config.CreateMapper();
User user = new User { FirstName = "John", LastName = "Doe", Address = "123 Street", City = "CityName" };
UserDTO userDto = mapper.Map<UserDTO>(user);
Public Class User
	Public Property FirstName() As String
	Public Property LastName() As String
	Public Property Address() As String
	Public Property City() As String
End Class

Public Class UserDTO
	Public Property FullName() As String
	Public Property Address() As String
	Public Property City() As String
End Class

' Mapping Configuration
Private config = New MapperConfiguration(Sub(cfg)
	cfg.CreateMap(Of User, UserDTO)().ForMember(Function(dest) dest.FullName, Function(opt) opt.MapFrom(Function(src) src.FirstName & " " & src.LastName))
End Sub)
Private mapper As IMapper = config.CreateMapper()
Private user As New User With {
	.FirstName = "John",
	.LastName = "Doe",
	.Address = "123 Street",
	.City = "CityName"
}
Private userDto As UserDTO = mapper.Map(Of UserDTO)(user)
$vbLabelText   $csharpLabel
  • Dieses Beispiel zeigt das Mapping zwischen User und UserDTO, wobei der FullName in UserDTO eine Verkettung von FirstName und LastName von User ist.

Beispiel 2: Fortgeschrittenes Mapping mit komplexen Objekten

In einem komplexeren Szenario lassen Sie uns ein Bestellobjekt mit verschachtelten Benutzerdetails auf ein vereinfachtes Order-DTO abbilden:

public class Order
{
    public User OrderedBy { get; set; }
    // Other properties...
}

public class OrderDTO
{
    public string FullName { get; set; }
    // Other properties...
}

// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Order, OrderDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.OrderedBy.FirstName + " " + src.OrderedBy.LastName));
});
IMapper mapper = config.CreateMapper();
Order order = new Order { OrderedBy = new User { FirstName = "Jane", LastName = "Doe" } };
OrderDTO orderDto = mapper.Map<OrderDTO>(order);
public class Order
{
    public User OrderedBy { get; set; }
    // Other properties...
}

public class OrderDTO
{
    public string FullName { get; set; }
    // Other properties...
}

// Mapping Configuration
var config = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<Order, OrderDTO>()
       .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.OrderedBy.FirstName + " " + src.OrderedBy.LastName));
});
IMapper mapper = config.CreateMapper();
Order order = new Order { OrderedBy = new User { FirstName = "Jane", LastName = "Doe" } };
OrderDTO orderDto = mapper.Map<OrderDTO>(order);
Public Class Order
	Public Property OrderedBy() As User
	' Other properties...
End Class

Public Class OrderDTO
	Public Property FullName() As String
	' Other properties...
End Class

' Mapping Configuration
Private config = New MapperConfiguration(Sub(cfg)
	cfg.CreateMap(Of Order, OrderDTO)().ForMember(Function(dest) dest.FullName, Function(opt) opt.MapFrom(Function(src) src.OrderedBy.FirstName & " " & src.OrderedBy.LastName))
End Sub)
Private mapper As IMapper = config.CreateMapper()
Private order As New Order With {
	.OrderedBy = New User With {
		.FirstName = "Jane",
		.LastName = "Doe"
	}
}
Private orderDto As OrderDTO = mapper.Map(Of OrderDTO)(order)
$vbLabelText   $csharpLabel
  • Dieses Beispiel demonstriert das Mapping von einem Order-Objekt, das verschachtelte OrderedBy-Details enthält, zu einem flachen OrderDTO, wodurch Benutzernamen in eine einzelne FullName-Eigenschaft extrahiert und kombiniert werden.

Mit Version 9.0 ist AutoMapper von einer statischen API (Mapper.Initialize) zu einer instanzbasierten API übergegangen. Diese Änderung verbessert die Flexibilität und ist besser geeignet für moderne Anwendungen, insbesondere solche, die Dependency Injection verwenden. Wenn Sie mit älteren Versionen als 9.0 arbeiten, ist der statische API-Ansatz anwendbar. Für neuere Versionen wird jedoch empfohlen, die instanzbasierte API, wie in den oben genannten Beispielen beschrieben, zu übernehmen.

Übersicht über die Iron Software Suite

Das Iron Software Suite for .NET ist ein robustes Paket mit einer Reihe von Bibliotheken, die jeweils einem bestimmten Zweck dienen. Es deckt Funktionen ab wie das Erstellen, Lesen und Bearbeiten von PDFs, die Umwandlung von HTML in PDF und die Verarbeitung von Bildern in Text in mehreren Sprachen. Diese Suite erfüllt verschiedene Entwicklungsbedürfnisse und ist eine vielseitige Ergänzung für jedes C#-Projekt.

Schlüsselkomponenten der Iron Software Suite

  1. IronPDF für PDF-Management: Diese Komponente ermöglicht es Entwicklern, PDFs zu erstellen, zu lesen, zu bearbeiten und zu signieren. Es bietet auch die Möglichkeit, HTML in PDF umzuwandeln, was besonders nützlich sein kann, um Berichte oder Dokumentationen aus webbasierter Daten zu erstellen.

Automapper C# (Wie es für Entwickler funktioniert): Abbildung 1 - IronPDF für .NET: Die C# PDF-Bibliothek

  1. IronXL Excel-Dateibehandlung: IronXL erleichtert die Arbeit mit Excel-Dateien, ohne dass Office Interop erforderlich ist, und rationalisiert somit Aufgaben der Datenmanipulation und -analyse.

Automapper C# (Wie es für Entwickler funktioniert): Abbildung 2 - IronXL für .NET: Die C# Excel-Bibliothek

  1. IronOCR für Textextraktion: Es ermöglicht die Textextraktion aus Bildern und unterstützt eine vielfältige Palette von 125 Sprachen, was es besonders vielseitig für internationale Projekte macht.

Automapper C# (Wie es für Entwickler funktioniert): Abbildung 3 - IronOCR für .NET: Die C# OCR-Bibliothek

  1. IronBarcode für QR- und Barcodesupport: Eine Bibliothek, die das Lesen und Schreiben von QR-Codes und Barcodes ermöglicht und die Fähigkeiten für Bestandsmanagement, Verfolgung und andere verwandte Aufgaben erweitert.

Automapper C# (Wie es für Entwickler funktioniert): Abbildung 4 - IronBarcode für .NET: Die C# Barcode-Bibliothek

Komplementarität mit Automapper

Während Automapper die Zuordnung von Eigenschaften zwischen verschiedenen Objektmodellen in C# vereinfacht, erweitern Iron Software's Bibliotheken die Funktionalität, indem sie Tools für den Umgang mit verschiedenen Datenformaten und -typen bieten. Zum Beispiel, nachdem Automapper verwendet wurde, um ein Benutzerdomänenobjekt in ein DTO zu transformieren, könnte IronPDF verwendet werden, um einen umfassenden Bericht im PDF-Format zu erstellen. Ähnlich könnte Daten, die mit Automapper extrahiert oder transformiert wurden, weiter manipuliert oder mit IronXL für Excel-Dateioperationen analysiert werden.

Abschluss

Automapper ist ein unschätzbares Werkzeug für C#-Entwickler, das die Aufgabe der Abbildung zwischen Objekten vereinfacht. Seine robusten Fähigkeiten bei der Abbildung von Eigenschaften, der Handhabung komplexer Objektmodelle und der Bereitstellung anpassbarer Mapping-Konfigurationen machen es zu einem unverzichtbaren Werkzeug für effiziente Softwareentwicklung. Das Verständnis der Feinheiten von Objektmodellen und wie Automapper konfiguriert werden kann, um spezifische Bedürfnisse zu erfüllen, ist entscheidend, um sein Potenzial in jedem Projekt zu maximieren.

Das Iron Software Iron Suite bietet verschiedene Lizenzierungsoptionen, einschließlich einer kostenlosen Testversion von Iron Software, die unterschiedlichen Projektanforderungen gerecht wird. Die Lizenzen sind in den Stufen Lite, Plus und Professional gestaffelt und richten sich an verschiedene Teamgrößen und bieten umfassende Supportfunktionen. Die Integration dieser Suite mit Automapper kann C#-Projekte erheblich verbessern, indem sie Datenverarbeitungs- und Dokumentenmanipulationsfähigkeiten hinzufügt.

Häufig gestellte Fragen

Wie kann ich effizient Eigenschaften zwischen verschiedenen Objekttypen in C# zuordnen?

Sie können Automapper in C# verwenden, um die Zuordnung von Eigenschaften zwischen verschiedenen Objekttypen zu automatisieren. Durch die Definition einer Konfiguration können Sie festlegen, wie Quellobjekteigenschaften auf Zielobjekte abgebildet werden, wodurch manuelle Codierung reduziert und Fehler minimiert werden.

Was ist der Prozess zur Behandlung verschachtelter Objekte in C# mit Automapper?

Automapper kann komplexe Objektmodelle abflachen und ermöglicht es, verschachtelte Eigenschaften in eine einfache Zielstruktur zu überführen. Diese Funktion ist besonders nützlich, um verschachtelte Objekte in vereinfachte Datenübertragungsobjekte (DTOs) zu transformieren.

Wie kann ich die Objektzuordnung mit der Handhabung von PDF- und Excel-Dateien in C# integrieren?

Nachdem Sie Automapper verwendet haben, um Objekteigenschaften zuzuordnen, können Sie die Bibliotheken von Iron Software wie IronPDF und IronXL integrieren, um Berichte zu erstellen oder Daten in PDF- und Excel-Formaten zu bearbeiten, wodurch die Datenverarbeitungsfähigkeiten Ihrer C#-Projekte verbessert werden.

Was sind die Vorteile der Verwendung von Automapper mit Dependency Injection in modernen Anwendungen?

In Version 9.0 wechselte Automapper zu einem flexibleren API-Design, das speziell auf die Kompatibilität mit modernen Anwendungen abzielt, die Dependency Injection verwenden. Diese Änderung ermöglicht dynamischere und skalierbare Zuordnungskonfigurationen.

Kann Automapper die Zuordnung für verschiedene Objektmodelle wie DTOs und Domänenobjekte handhaben?

Ja, Automapper ist darauf ausgelegt, die Zuordnung zwischen verschiedenen Objektmodellen zu handhaben, einschließlich Benutzerdomänenobjekten und Datenübertragungsobjekten (DTOs), und bietet Vielseitigkeit für unterschiedliche Datenübertragungsanforderungen in C#-Anwendungen.

Was sind die Schritte, um mit Automapper in einem C#-Projekt zu beginnen?

Um Automapper in einem C#-Projekt zu verwenden, installieren Sie es über die Paketmanager-Konsole mit dem Befehl: Install-Package AutoMapper. Dann definieren Sie Zuordnungskonfigurationen, um den Zuordnungsprozess zwischen Ihren Objektmodellen zu automatisieren.

Jacob Mellor, Chief Technology Officer @ Team Iron
Chief Technology Officer

Jacob Mellor ist Chief Technology Officer bei Iron Software und ein visionärer Ingenieur, der führend in der C# PDF-Technologie ist. Als ursprünglicher Entwickler der Iron Software-Kerncodebasis hat er die Produktarchitektur des Unternehmens seit seiner Gründung gestaltet und zusammen mit CEO Cameron Rimington in ein Unternehmen ...

Weiterlesen