> 백엔드 개발 > C++ > EF Core의 DTO에 단일 하위 속성을 매핑하기 위해 코드를 어떻게 재사용할 수 있나요?

EF Core의 DTO에 단일 하위 속성을 매핑하기 위해 코드를 어떻게 재사용할 수 있나요?

Susan Sarandon
풀어 주다: 2025-01-23 19:41:09
원래의
650명이 탐색했습니다.

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

EF Core에서 단일 하위 속성에 대한 DTO 매핑 간소화

EF Core(Entity Framework Core)는 식 트리를 사용하여 개체에서 DTO(데이터 전송 개체)로의 변환을 단순화합니다. 이는 하위 컬렉션에 적합하지만 단일 하위 속성을 매핑하는 것은 덜 직관적일 수 있습니다. 이 문서에서는 코드를 재사용하고 이 시나리오를 효율적으로 처리하기 위한 솔루션을 살펴봅니다.

과제: 단일 하위 속성 매핑

단일 하위 속성을 DTO에 직접 매핑하려면 수동으로 표현식을 추가해야 하므로 반복적인 코드가 발생하는 경우가 많습니다. 다음 예를 고려해보세요:

<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>
로그인 후 복사

해결책: 외부 라이브러리 활용

여러 라이브러리는 단일 엔터티에 대해 .Select()과 유사한 기능을 효과적으로 추가하여 코드 재사용을 가능하게 하는 우아한 솔루션을 제공합니다.

1. LINQKit:

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 = model.AnotherChildModel.AsDto() // LINQKit handles this
    };</code>
로그인 후 복사

2. NeinLinq:

NeinLinq는 람다 주입을 사용하여 유사한 접근 방식을 제공합니다.

<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>
로그인 후 복사

3. DelegateDecompiler:

DelegateDecompiler는 계산된 속성을 사용하여 더욱 간결한 구문을 제공합니다. 매핑의 복잡성에 따라 이 접근 방식이 항상 적합하지 않을 수도 있습니다.

<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>
로그인 후 복사

각 라이브러리가 프로젝트 내에서 올바르게 작동하려면 적절한 설정과 구성이 필요합니다.

결론:

이러한 라이브러리는 단일 하위 속성을 EF Core의 DTO에 매핑할 때 코드를 재사용하여 중복성을 줄이고 유지 관리성을 향상시키는 효율적인 솔루션을 제공합니다. 올바른 라이브러리를 선택하는 것은 프로젝트 선호도와 복잡성에 따라 다릅니다. 핵심 이점은 DTO 매핑에 대한 일관되고 DRY(Don't Repeat Yourself) 접근 방식입니다.

위 내용은 EF Core의 DTO에 단일 하위 속성을 매핑하기 위해 코드를 어떻게 재사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿