[EFCore] Include VS ThenInclude

2022. 9. 2. 15:31·공부/EFCore
728x90

 

    [Table("Item")]
    public class Item
    {
        // 이름Id -> PK
        public int ItemId { get; set; }
        public int TemplateId { get; set; } // 101 = 집행검
        public DateTime CreateDate { get; set; }

        // 다른 클래스 참조 -> FK (Navigational Property)
        [ForeignKey("OwnerId")]
        public Player Owner { get; set; }
    }

    [Table("Player")]
    // Entity 클래스 이름 = 테이블 이름 = Player
    public class Player
    { 
        // 이름Id -> PK
        public int PlayerId { get; set; }
        public string Name { get; set; }    

        public Item Item { get; set; }
        public Guild Guild { get; set; }
    }

    [Table("Guild")]
    public class Guild
    {
        public int GuildId { get; set; }
        public string GuildName { get; set; }
        public ICollection<Player> Members { get; set; }
    }

 

내가 처한 상황이다. Guild는 Player를 담고 있고 Player는 Item을 담고 있다.

 

✅ Include

 

Guild를 통해 Player의 상황을 알아볼 수 있다.

 

db.Guilds.AsNoTracking()
    .Where(g => g.GuildName == name)
    .Include(g => g.Members)

 

사용자에게서 GuildName을 받아 그 이름과 일치하는 길드 안에 있는 Members(Player)의 정보를 알아볼 수 있다. 하지만 그 Player가 지닌 Item 정보까지 알아볼 수는 없다. 이때는 ThenInclude를 사용해야 한다.

 

✅ ThenInclude

 

db.Guilds.AsNoTracking()
    .Where(g => g.GuildName == name)
    .Include(g => g.Members)
        .ThenInclude(p => p.Item)
    .First();

 

ThenInclude를 사용하면 Include보다 하나 더 깊게 들어가서 Guild에 있는 Player가 지닌 Item을 볼 수 있게 된다.

참고로 .First()는 하나의 데이터를 보여달라는 뜻이다. SelectTopOne 격으로 볼 수 있다.

728x90

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

[EFCore] DB에 이미 존재하는 사용자를 PK로 연결하려면?  (0) 2022.09.04
[EFCore] SaveChanges를 호출하면 어떤 일이 일어날까  (0) 2022.09.04
[EFCore] Entity State, 엔티티의 상태를 알아보자  (0) 2022.09.04
[EFCore] Eager Loading / Explicit Loading / Select Loading  (0) 2022.09.02
[EFCore] System.TypeInitializationException과 Unable to load 'sni.dll' 오류해결하기  (0) 2022.09.01
'공부/EFCore' 카테고리의 다른 글
  • [EFCore] SaveChanges를 호출하면 어떤 일이 일어날까
  • [EFCore] Entity State, 엔티티의 상태를 알아보자
  • [EFCore] Eager Loading / Explicit Loading / Select Loading
  • [EFCore] System.TypeInitializationException과 Unable to load 'sni.dll' 오류해결하기
돌멩이수프
돌멩이수프
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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.2
돌멩이수프
[EFCore] Include VS ThenInclude
상단으로

티스토리툴바