[EFCore] DTO 활용하기

2022. 9. 5. 16:26·공부/EFCore
728x90

 

DTO란 Data Transfer Object의 준말이다.

우리가 DB에서 원하는 정보를 빼오기 위해 Select 구문을 이용하는 기존 함수를 살펴보자.

 

using (var db = new AppDbContext())
{
    var info = db.Guilds
        .Where(g => g.GuildName == name)
        .Select(g => new
        {
            Name = g.GuildName,
            MemberCount = g.Members.Count
        })
        .First();

    Console.WriteLine($"GuildName ({info.Name}), MemberCount({info.MemberCount})");
}

 

Select 뒷 부분을 유심히 살펴보면 Guild의 정보를 뽑아오기 위해 Guild를 새롭게 가공하는 모습이다. 우리는 익명 함수 형식으로 멤버 수를 뽑아왔지만 class로 빼서 관리하는 편이 더 좋다. 이를 위해 DTO를 사용하는 예시를 살펴보자.

 

 

public class GuildDto
{
    public int GuildId { get; set; }
    public string Name { get; set; }
    public int MemberCount { get; set; }
}

 

DB에 있는 정보를 재가공하기 위해 GuildDto라는 이름으로 정보를 다시 꾸며줬다.

 

public static IQueryable<GuildDto> MapGuildToDto(this IQueryable<Guild> guild)
{
    return guild.Select(g => new GuildDto()
    {
        GuildId = g.GuildId,
        Name = g.GuildName,
        MemberCount = g.Members.Count
    });
}

 

Extansion 안에 새로운 함수를 만들어줬다. 새로 들어오는 정보를 기존 GuildDto로 들여보내주는 역할이다.

 

using (var db = new AppDbContext())
{
    var info = db.Guilds
        .Where(g => g.GuildName == name)
        .mapGuildToDto()
        .First();

    Console.WriteLine($"GuildName ({info.Name}), MemberCount({info.MemberCount})");
}

 

거추장스러운 Select가 사라지고 함수 호출로 기존과 같이 길드의 멤버 수를 알아오는 코드가 완성됐다.

728x90

'공부 > EFCore' 카테고리의 다른 글

[EFCore] Pricipal 데이터가 없을 때 Dpendent 데이터가 존재할 수 있는가?  (0) 2022.09.05
[EFCore] Disconnected Update (Reload / Full Update)  (0) 2022.09.05
[EFCore] DB에 존재하는 데이터 수정하기  (0) 2022.09.05
[EFCore] DB에 이미 존재하는 사용자를 PK로 연결하려면?  (0) 2022.09.04
[EFCore] SaveChanges를 호출하면 어떤 일이 일어날까  (0) 2022.09.04
'공부/EFCore' 카테고리의 다른 글
  • [EFCore] Pricipal 데이터가 없을 때 Dpendent 데이터가 존재할 수 있는가?
  • [EFCore] Disconnected Update (Reload / Full Update)
  • [EFCore] DB에 존재하는 데이터 수정하기
  • [EFCore] DB에 이미 존재하는 사용자를 PK로 연결하려면?
돌멩이수프
돌멩이수프
Information technology
  • 돌멩이수프
    WHAT DOES "IT" STAND FOR?
    돌멩이수프
  • 전체
    오늘
    어제
    • 분류 전체보기 (239)
      • 언어 (73)
        • html (3)
        • css (1)
        • java (6)
        • C (26)
        • C++ (2)
        • C# (29)
      • 공부 (7)
        • Unity (43)
        • 게임 서버 (26)
        • 네트워크 (5)
        • 데이터베이스 (7)
        • EFCore (19)
        • 기타 (14)
        • Git (5)
        • 운영체제 (1)
        • 소프트웨어공학 (21)
      • 2024-여름 (12)
      • 자기 관리 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    HTML
    라즈베리파이
    네트워크
    Entityfamework
    C#
    EFCore
    유니티
    백준
    디자인패턴
    코딩
    Python
    coding
    tcp
    C언어
    게임서버
    자바
    EntityFramework
    C
    java
    unity
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
돌멩이수프
[EFCore] DTO 활용하기
상단으로

티스토리툴바