Heim > Backend-Entwicklung > C++ > Wie kann ich Code zum Zuordnen einzelner untergeordneter Eigenschaften zu DTOs in EF Core wiederverwenden?

Wie kann ich Code zum Zuordnen einzelner untergeordneter Eigenschaften zu DTOs in EF Core wiederverwenden?

Susan Sarandon
Freigeben: 2025-01-23 19:41:09
Original
699 Leute haben es durchsucht

How Can I Reuse Code for Mapping Single Child Properties to DTOs in EF Core?

Optimierung der DTO-Zuordnung für einzelne untergeordnete Eigenschaften in EF Core

Entity Framework Core (EF Core) vereinfacht die Objekt-zu-DTO-Konvertierung (Data Transfer Object) mithilfe von Ausdrucksbäumen. Dies funktioniert gut für untergeordnete Sammlungen, die Zuordnung einzelner untergeordneter Eigenschaften kann jedoch weniger intuitiv sein. In diesem Artikel werden Lösungen zur Wiederverwendung von Code und zur effizienten Bewältigung dieses Szenarios untersucht.

Die Herausforderung: Zuordnung von Single-Child-Eigenschaften

Das direkte Zuordnen einer einzelnen untergeordneten Eigenschaft zu einem DTO erfordert oft manuelle Ausdruckszusätze, was zu sich wiederholendem Code führt. Betrachten Sie dieses Beispiel:

<code class="language-csharp">public static Expression<Func<Model, ModelDto>> AsDto =>
    model => new ModelDto
    {
        ModelId = model.ModelId,
        ModelName = model.ModelName,
        ChildModels = model.ChildModels.AsQueryable().Select(ChildModel.AsDto).ToList(),
        AnotherChildModel = new AnotherChildModelDto // Manual mapping here
        {
            AnotherChildModelId = model.AnotherChildModel.AnotherChildModelId
        }
    };</code>
Nach dem Login kopieren

Die Lösung: Nutzung externer Bibliotheken

Mehrere Bibliotheken bieten elegante Lösungen, indem sie effektiv eine .Select()-ähnliche Funktionalität für einzelne Entitäten hinzufügen und so die Wiederverwendung von Code ermöglichen:

1. LINQKit:

LINQKit ermöglicht die Erweiterung von Ausdrücken und verarbeitet die Zuordnung einzelner untergeordneter Elemente dynamisch.

<code class="language-csharp">[Expandable(nameof(AsDtoImpl))]
public static ModelDto AsDto(Model model)
{
    _asDtoImpl ??= AsDtoImpl().Compile();
    return _asDtoImpl(model);
}

private static Func<Model, ModelDto> _asDtoImpl;

private static Expression<Func<Model, ModelDto>> AsDtoImpl =>
    model => new ModelDto
    {
        ModelId = model.ModelId,
        ModelName = model.ModelName,
        ChildModels = model.ChildModels.AsQueryable().Select(ChildModel.AsDto).ToList(),
        AnotherChildModel = model.AnotherChildModel.AsDto() // LINQKit handles this
    };</code>
Nach dem Login kopieren

2. NeinLinq:

NeinLinq bietet einen ähnlichen Ansatz mit Lambda-Injektion.

<code class="language-csharp">[InjectLambda]
public static ModelDto AsDto(Model model)
{
    _asDto ??= AsDto().Compile();
    return _asDto(model);
}

private static Func<Model, ModelDto> _asDto;

private static Expression<Func<Model, ModelDto>> AsDto =>
    model => new ModelDto
    {
        ModelId = model.ModelId,
        ModelName = model.ModelName,
        ChildModels = model.ChildModels.AsQueryable().Select(ChildModel.AsDto).ToList(),
        AnotherChildModel = model.AnotherChildModel.AsDto() // NeinLinq handles this
    };</code>
Nach dem Login kopieren

3. DelegateDecompiler:

DelegateDecompiler bietet eine präzisere Syntax mithilfe berechneter Eigenschaften. Beachten Sie, dass dieser Ansatz je nach Komplexität Ihres Mappings möglicherweise nicht immer geeignet ist.

<code class="language-csharp">[Computed]
public static ModelDto AsDto(Model model)
=> new ModelDto
{
    ModelId = model.ModelId,
    ModelName = model.ModelName,
    ChildModels = model.ChildModels.AsQueryable().Select(ChildModel.AsDto).ToList(),
    AnotherChildModel = model.AnotherChildModel.AsDto() // DelegateDecompiler handles this
};</code>
Nach dem Login kopieren

Jede Bibliothek erfordert eine entsprechende Einrichtung und Konfiguration, um in Ihrem Projekt ordnungsgemäß zu funktionieren.

Fazit:

Diese Bibliotheken bieten effiziente Lösungen für die Wiederverwendung von Code beim Zuordnen einzelner untergeordneter Eigenschaften zu DTOs in EF Core, wodurch Redundanz reduziert und die Wartbarkeit verbessert wird. Die Auswahl der richtigen Bibliothek hängt von den Projektpräferenzen und der Komplexität ab. Der Hauptvorteil ist ein konsistenter und trockener Ansatz (Don't Repeat Yourself) für die DTO-Zuordnung.

Das obige ist der detaillierte Inhalt vonWie kann ich Code zum Zuordnen einzelner untergeordneter Eigenschaften zu DTOs in EF Core wiederverwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage