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 |