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

Entity State & Relationship (1)

monstro 2025. 8. 26. 10:48
728x90
반응형

- 개요

DB와의 상호작용을 관리하는 DBContext 클래스에는 다음의 중요한 3가지 요소가 존재합니다.

  • 1) ChangeTracker : Tracking State와 관련된 요소, Entity의 상태 관리와 연관됨
  • 2) Database : Transaction / DB Creattion - Migration / Raw SQL과 관련된 요소
  • 3) Model : DB 모델링과 관련된 요소

 

위의 3가지 요소 중에서 ChangeTracker의 엔티티의 상태에 대해서 알아보겠습니다.

엔티티의 상태는 다음의 3가지 방법으로 확인할 수 있습니다.

  • 1) Entry().State
  • 2) Entry().Property().IsModified
  • 3) Entry().Navigation().IsModified

 

일반적으로 State는 직관적으로 설정되지만, Relationship이 추가되면 훨씬 복잡하게 설정됩니다.

우선, 다음의 2개의 동작 이후에 State가 어떻게 설정되는지 알아보겠습니다.

  • Add / AddRange
  • Remove / RemoveRange

 

- 실습

 

CreateTestData 함수에 위와 같이 로직을 추가하였습니다.

일반적으로 Add / AddRange하는 경우의 상태 변화는 다음과 같이 이뤄집니다.

  • NotTracking 상태라면 Added로 설정
  • Tracking 상태라면 외래키 설정에 따라 Modified 또는 기존 상태 유지

 

Remove / RemoveRange하는 경우의 상태 변화는 다음과 같이 이뤄집니다.

  •  DB에 의해 생성된 Key이면서, C#의 기본값아닌 경우 : 필요에 따라 Unchanged / Modified / Deleted 등으로 설정
  •  DB에 의행 생성된 Key없거나, C#의 기본값인 경우 :  Added로 설정

 

- 최종 실행 결과

 

최종 실행 결과를 분석하면 다음과 같습니다.

  • DB에 의해 Tracking되고 있지 않으므로 Added
  • SaveChanges 함수가 호출되어 DB에 의해 Tracking되고 있으므로 Unchanged
  • 플레이어를 직접 삭제하므로 Deleted
  • 길드는 DB에 의해 생성된 Key가 없으므로 Added
  • 아이템은 DB에 의해 생성된 Key가 있으므로 Deleted
728x90
반응형

'대형 프로젝트 - C# + 유니티로 만드는 MMORPG 게임 개발 > (5) EF Core' 카테고리의 다른 글

State 조작  (0) 2025.08.26
Entity State & Relationship (2)  (0) 2025.08.26
Migration  (0) 2025.08.25
Default Value  (0) 2025.08.25
User Defined Function(UDF)  (0) 2025.08.25