반응형
Find() vs Local.Where()
EF Core에서 DbContext.Set<TEntity>()를 사용해서 데이터에 접근할 때 Find()와 Local.Where()의 차이에 대해서 이해하고 적절한 상황에 알맞게 사용하는 것이 중요하다. 보통의 경우 SaveChanges() 메서드를 호출하기 전에 메모리에 있는 데이터에 접근하기 위해서 Find()와 Local을 이용할 텐데 이때 두 방법의 차이를 알아두면 코드 작성 시에 도움이 된다.
Find() 메서드
- Find()는 기본 키(Primary Key)를 기준으로 엔티티(Entity)를 검색한다.
- 먼저 DbContext의 변경 추적(Tracking)된 메모리에 해당 데이터가 있는지 확인한 후, 없으면 데이터베이스에서 조회한다.
- 기본 키로만 검색이 가능하며, 다른 컬럼 조건을 사용할 수 없다.
- 메모리에서 우선적으로 검색 없다면 데이터베이스까지 검색
var user = context.Users.Find(1); // 기본 키(PK)가 1인 User 검색
📌 Find() 메서드 장점
- 성능 최적화: 이미 DbContext에서 추적 중이라면 DB 조회 없이 반환한다.
- PK 검색: 기본 키 기반 검색만을 지원하므로 가장 빠르다.
🤔 Find() 메서드 단점
- 기본 키 이외의 검색이 불가능
- 항상 단일 엔티티만 반환 (리스트 조회 불가)
Local.Where() 메서드
- context.Users.Local은 현재 DbContext가 추적(Tracking)하고 있는 엔티티 목록을 나타낸다.
- 데이터베이스를 조회하지 않고, 메모리에 있는 엔티티만 조회한다.
- LINQ를 사용하여 다양한 조건으로 검색이 가능하다.
var users = context.Users.Local.Where(u => u.Age > 30).ToList(); // 로컬에서 나이 30 초과 검색
📌 Local.Where() 메서드 장점
- 빠른 검색: 이미 로드된 데이터만 검색하므로 DB 쿼리를 실행하지 않는다.
- LINQ 조건 사용 가능(Where, Select 등)
- 리스트로 반환 가능
🤔 Local.Where() 메서드 단점
- 메모리에 로드되지 않은 데이터는 조회가 불가능
- 데이터베이스에 있는 데이터는 조회가 불가능
Find() vs Local.Where()
정리하자면
- Find()를 사용해서 기본 키로 단일 객체를 빠르게 메모리와 DB에서 검색이 가능
- Local.Where()를 사용하면 LINQ를 사용해서 메모리에서 다수의 객체를 검색이 가능
'프로그래밍 > C#' 카테고리의 다른 글
JSON 점 표기법(Dot Notation)에 대해서 (0) | 2025.03.06 |
---|---|
C# 컴퓨터가 문자를 표현하는 방법, 문자 인코딩 (0) | 2025.02.20 |
C# 폴더 안에 있는 모든 파일 찾기 (0) | 2025.01.23 |
C# StackExchange 사용해서 redis에 객체 저장하고 불러오기 (0) | 2025.01.13 |
C# 웹앱에서 appsettings.json 설정값 사용하기 (0) | 2025.01.07 |
댓글