대형 프로젝트 - C# + 유니티로 만드는 MMORPG 게임 개발/(5) EF Core

Relationship 기초

monstro 2025. 8. 4. 16:53
728x90
반응형

- 개요

EF Core 프레임워크에서 데이터 테이블로 사용하는 클래스를 Entity 클래스라고 표현합니다.

그리고 이런 Entity 클래스(데이터 테이블)간의 관계는 다음과 같이 3개의 관계가 존재합니다.

  • 1 : 1 관계
  • 1 : 多 관계
  • 多 : 多 관계

 

이번 포스트에서는 EF Core에서 1 : 1 관계1 : 多 관계를 구현하는 방법을 알아보겠습니다.

 

- 사전 작업

DbContext 클래스

 

시작하기에 앞서 이전에 만든 DbContext새로운 DbSetPlayers를 추가하겠습니다.

해당 DbSet을 추가함으로써 Player 엔티티 클래스에 대한 접근과 조작이 가능하도록 명시하겠습니다.

 

메인 프로그램 클래스 main 함수

 

main 함수의 로직을 위와 같이 일부 수정하였습니다.

기존의 Update와 Delete를 삭제하고 참조관계에 있는 데이터 테이블의 데이터를 가져오도록 수정하였습니다.

 

1) 1 : 1 관계의 구현

1 - 1) DataModel 클래스

Item 엔티티 클래스
Player 엔티티 클래스

 

1 : 1 관계를 구현하기 위해서는 데이터 테이블에 반드시 외래키를 포함시켜야 합니다.

외래키를 포함시키는 방법은 2가지로 구성되어 있습니다.

  • 외래키 프로퍼티를 추가
  • ForeignKey 어트리뷰트를 사용

 

프로젝트에서는 ForeignKey 어트리뷰트를 사용하여 Item 테이블에서 Player 테이블 참조합니다.

 

1 - 2) DBCommands 클래스

 

ShowItems 함수의 로직은 위와 같습니다.

검색할 플레이어의 이름을 입력받고 입력받은 값을 통해 Where 쿼리를 사용하여 데이터를 가져옵니다.

가져온 데이터를 Include 함수를 사용하여 즉시 로딩하여 플레이어의 아이템의 ID를 출력합니다.

 

- 1 : 1 관계에서의 실행 결과

 

위와 같이 출력되는 것을 확인할 수 있습니다.

 

2) 1 : 多 관계의 구현

2 - 1) DataModel 클래스

Item 엔티티 클래스

 

Player 엔티티 클래스

 

1 : 多 관계에서는 위와 같이 데이터 테이블의 외래키를 생략하는 것이 가능합니다.

단독으로 다수의 테이블을 참조하는 테이블 데이터 컨테이너를 사용하여 데이터를 저장해야 합니다.

프로젝트에서는 List보다 효율이 좋은 ICollection을 사용하여 데이터를 저장합니다.

 

2 - 2) DBCommands 클래스

 

ShowItems 함수의 로직은 위와 같습니다.

검색할 플레이어의 이름을 입력받고 입력받은 값을 통해 Where 쿼리를 사용하여 데이터를 가져옵니다.

가져온 데이터를 Include 함수를 사용하여 즉시 로딩하고 순회하면서 플레이어의 아이템의 ID를 출력합니다.

 

- 1 : 多 관계에서의 실행 결과

 

위와 같이 출력되는 것을 확인할 수 있습니다.

728x90
반응형