728x90
반응형
- 개요
LINQ로 처리할 수 없는 것을 처리해야 하거나 성능을 최적화해야 하는 경우
상황에 따라 직접 만든 SQL을 호출하는 것이 훨씬 효율적입니다.
SQL을 호출하는 방법은 다음의 3가지가 존재합니다.
- FromSql의 함수 사용 : FromSqlRaw / FromSqlInterpolated
- 데이터를 가져오는 것은 가능하지만, 데이터를 수정하는 것은 불가
- ExecuteSql의 함수 사용 : ExecuteSqlRaw / ExecuteSqlInterplated
- 데이터를 수정하는 것이 가능
- Reload : Tracked Entity가 존재하는 상황에서 DB와 엔티티 클래스를 동기화
또, EF-Core 프레임워크를 사용하면서 동작을 확인할 수 있는 로깅을 사용해보도록 하겠습니다.
1) 로깅

로깅을 사용하기 위해서는 위의 패키지가 설치되어 있어야 합니다.

패키지를 설치한 후에, DBContext 클래스에서 ILoggerFactory 인스턴스를 생성합니다.
OnConfiguring 함수를 위와 같이 수정하였습니다.
생성한 인스턴스를 UseLoggerFactory 함수에 인자로 넘겨 로깅을 사용할 수 있습니다.
2) SQL 직접 호출

DBCommand 클래스에 Test 함수를 추가하여 FromSql / ExecuteSql / Reload를 모두 수행합니다.
Raw 방식과 Interploated 방식이 나뉜 이유는 해커의 SQL Injection 공격을 방어하기 위함입니다.
- FromSql 함수를 사용하여 Kim의 이름을 지닌 플레이어의 이름과 ID를 가져와 출력
- ExecuteSql 함수를 사용하여 Kim의 이름을 지닌 플레이어의 이름을 Kim_New로 수정
- 수정한 이후 Reload 함수를 호출하여 엔티티 클래스와 DB를 동기화
- 최종 실행 결과

위와 같이 플레이어의 이름과 ID가 출력되고 관련한 SQL의 동작을 로그로 확인할 수 있습니다.

실제 데이터도 위와 같이 재설정되었습니다.
728x90
반응형
'대형 프로젝트 - C# + 유니티로 만드는 MMORPG 게임 개발 > (5) EF Core' 카테고리의 다른 글
| State 조작 (0) | 2025.08.26 |
|---|---|
| Entity State & Relationship (2) (0) | 2025.08.26 |
| Entity State & Relationship (1) (0) | 2025.08.26 |
| Migration (0) | 2025.08.25 |
| Default Value (0) | 2025.08.25 |