본문 바로가기
C# & .NetCore

[.Net Core] EF Core Context 주요 메서드 정리

by 개발자 포비 2025. 6. 1.

📚 EF Core DbContext 자주 사용하는 메서드 정리

🏷️ 엔티티 조회 및 추적

  • Set<T>(): 지정한 엔티티 타입(T)에 대한 DbSet을 반환한다.
    예: context.Set<User>()
  • FindAsync(): 기본 키 값으로 엔티티를 조회한다. (1차 캐시 우선)
    예: context.Users.FindAsync(1)
  • FirstOrDefaultAsync() / SingleOrDefaultAsync(): 조건에 맞는 첫 번째(또는 단일) 엔티티를 비동기적으로 가져온다.
    예: context.Users.FirstOrDefaultAsync(u => u.Name == "John")
  • ToListAsync(): IQueryable 결과를 비동기적으로 리스트로 변환한다.
    예: context.Users.Where(u => u.IsActive).ToListAsync()

🏷️ 엔티티 추가, 수정, 삭제

  • Add() / AddRange(): 새로운 엔티티(들)를 추가 상태로 등록한다.
    예: context.Users.Add(new User {...})
  • Update() / UpdateRange(): 엔티티(들)를 수정 상태로 등록한다.
    예: context.Users.Update(user)
  • Remove() / RemoveRange(): 엔티티(들)를 삭제 상태로 등록한다.
    예: context.Users.Remove(user)

🏷️ 변경 사항 저장

  • SaveChanges() / SaveChangesAsync(): 변경된 엔티티들을 데이터베이스에 반영한다.
    예: await context.SaveChangesAsync()

🏷️ 트래킹 제어

  • Entry(): 특정 엔티티의 상태 및 속성에 접근한다.
    예: context.Entry(user).State = EntityState.Modified
  • ChangeTracker: 현재 DbContext의 변경 추적 상태를 확인하고 제어한다.
    예: context.ChangeTracker.Entries()

🏷️ 명시적 로딩

  • Entry().Collection().Load() / Entry().Reference().Load(): Lazy Loading 없이 특정 컬렉션 또는 참조를 명시적으로 로드한다.
    예: context.Entry(user).Collection(u => u.Orders).Load()

🏷️ 기타 유용한 메서드

  • Database.EnsureCreated(): 데이터베이스를 존재하지 않으면 생성한다.
    예: context.Database.EnsureCreated()
  • Database.Migrate(): 최신 마이그레이션을 적용한다.
    예: context.Database.Migrate()
  • Database.BeginTransaction(): 트랜잭션을 시작한다.
    예: using var tx = context.Database.BeginTransaction();

✅ 요약

  • DbContext는 EF Core의 DB 작업을 관리하는 중심 객체.
  • 조회, 추가/수정/삭제, 변경 추적, 명시적 로딩 등 다양한 기능을 제공한다.
  • 트랜잭션 및 데이터베이스 관리 기능도 포함되어 있어 관리가 편리하다.

댓글