Maison > développement back-end > C++ > Comment puis-je réutiliser le code pour mapper des propriétés enfants uniques aux DTO dans EF Core ?

Comment puis-je réutiliser le code pour mapper des propriétés enfants uniques aux DTO dans EF Core ?

Susan Sarandon
Libérer: 2025-01-23 19:41:09
original
699 Les gens l'ont consulté

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

Rationalisation du mappage DTO pour les propriétés enfants uniques dans EF Core

Entity Framework Core (EF Core) simplifie la conversion d'objet en DTO (Data Transfer Object) à l'aide d'arborescences d'expression. Cela fonctionne bien pour les collections enfants, mais le mappage des propriétés enfants uniques peut être moins intuitif. Cet article explore des solutions pour réutiliser le code et gérer efficacement ce scénario.

Le défi : cartographie des propriétés d'un seul enfant

Le mappage direct d'une seule propriété enfant à un DTO nécessite souvent des ajouts d'expressions manuels, ce qui conduit à un code répétitif. Prenons cet exemple :

<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>
Copier après la connexion

La solution : tirer parti des bibliothèques externes

Plusieurs bibliothèques fournissent des solutions élégantes en ajoutant efficacement une fonctionnalité de type .Select() pour des entités uniques, permettant ainsi la réutilisation du code :

1. Kit LINQ :

LINQKit permet l'expansion des expressions, en gérant dynamiquement le mappage d'un seul enfant.

<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>
Copier après la connexion

2. NeinLinq :

NeinLinq propose une approche similaire utilisant l'injection lambda.

<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>
Copier après la connexion

3. DéléguéDécompilateur :

DelegateDecompiler propose une syntaxe plus concise utilisant des propriétés calculées. Notez que cette approche peut ne pas toujours convenir en fonction de la complexité de votre cartographie.

<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>
Copier après la connexion

Chaque bibliothèque nécessite une configuration et une configuration appropriées pour fonctionner correctement au sein de votre projet.

Conclusion :

Ces bibliothèques offrent des solutions efficaces pour réutiliser le code lors du mappage de propriétés enfants uniques aux DTO dans EF Core, réduisant ainsi la redondance et améliorant la maintenabilité. Le choix de la bonne bibliothèque dépend des préférences et de la complexité du projet. Le principal avantage est une approche cohérente et DRY (Don't Repeat Yourself) de la cartographie DTO.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal