Heim > Backend-Entwicklung > C++ > Wie können wir Entitäten in EF Core effizient in DTOs konvertieren, einschließlich untergeordneter Eigenschaften einzelner Entitäten?

Wie können wir Entitäten in EF Core effizient in DTOs konvertieren, einschließlich untergeordneter Eigenschaften einzelner Entitäten?

Patricia Arquette
Freigeben: 2025-01-23 19:52:26
Original
739 Leute haben es durchsucht

How Can We Efficiently Convert Entities to DTOs in EF Core, Including Single-Entity Child Properties?

Verwenden Sie wiederverwendbaren Code für benutzerdefinierte DTO-Transformationen in EF Core: Untereigenschaft für eine einzelne Entität

Problemstellung:

Wie kann die Konvertierung von Entitäten in DTO-Objekte erweitert werden, um Untereigenschaften außerhalb der Sammlung einzubeziehen, wenn Daten mit Entity Framework Core abgefragt werden?

Umsetzung:

In EF Core werden Ausdrücke verwendet, um Entitäten in DTOs zu konvertieren, was für Hauptentitäten und ihre Untersammlungen hervorragend funktioniert. Allerdings hat sich die Anwendung dieses Ansatzes auf nicht kollektive Untereigentümer als schwierig erwiesen.

Lösung:

Um dieses Problem zu lösen, können wir Bibliotheken wie LINQKit, NeinLinq oder DelegateDecompiler verwenden. Mit diesen Bibliotheken können wir eine Transformationsfunktion definieren, die eine Hauptentität und zusätzliche untergeordnete Eigenschaften enthält.

Beispiel:

Mit LINQKit:

<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 = new AnotherChildModelDto
        {
            AnotherChildModelId = model.AnotherChildModel.AnotherChildModelId //修正此处
        }
    };</code>
Nach dem Login kopieren

Abfragen können vor der Ausführung mit der AsExpandable()-Funktion der Bibliothek erweitert werden:

<code class="language-csharp">dbContext.Models
   .Where(m => SomeCriteria)
   .Select(m => Model.AsDto(m))
   .AsExpandable()
   .ToList();</code>
Nach dem Login kopieren

Für LINQKit kann dieser Prozess vereinfacht werden, indem die Ausdruckserweiterung global in der DbContext-Konfiguration aktiviert wird. Andere Bibliotheken wie NeinLinq und DelegateDecompiler bieten ähnliche Methoden. Beachten Sie, dass die Art und Weise, wie im Beispielcode auf das Attribut AnotherChildModel zugegriffen wird, geändert wurde, um den Prozess des Abrufens eines model.AnotherChildModel aus einem AnotherChildModelId genauer wiederzugeben. Dies setzt voraus, dass AnotherChildModel ein Objekt und keine separate ID ist.

Das obige ist der detaillierte Inhalt vonWie können wir Entitäten in EF Core effizient in DTOs konvertieren, einschließlich untergeordneter Eigenschaften einzelner Entitäten?. 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