EF Core 글로벌 쿼리 필터

  • 3 minutes to read

Entity Framework Core 8.0을 활용한 IsActive 필터링

IsActive 컬럼 추가 및 마이그레이션

이 섹션에서는 기존 모델에 IsActive 속성을 추가하는 방법과 해당 변경사항을 데이터베이스에 반영하는 방법을 설명합니다.

모델 클래스 수정

  1. IsActive 속성 추가
    • 먼저, 모든 엔터티 모델 클래스에 IsActive 속성을 추가합니다. 예를 들어, State 모델 클래스에 다음과 같은 속성을 추가합니다:

      public class State
      {
          // 기존 속성들...
      
          public bool IsActive { get; set; }
      }
      
    • 이 과정을 Tribe 및 기타 관련 모델 클래스에 대해서도 수행합니다.

마이그레이션 생성 및 적용

  1. 마이그레이션 추가

    • Add-Migration AddIsActive 명령을 사용하여 새로운 마이그레이션을 추가합니다. 이 마이그레이션은 IsActive 컬럼을 데이터베이스 스키마에 추가합니다.
  2. 데이터베이스 업데이트

    • Update-Database 명령을 실행하여 마이그레이션을 데이터베이스에 적용합니다.

글로벌 쿼리 필터 사용하기

이제 IsActive 속성을 기반으로 한 글로벌 쿼리 필터를 DbContext 클래스에 추가합니다. 이 필터는 IsActivetrue인 엔터티만 쿼리 결과에 포함되도록 합니다.

DbContext 클래스 수정

  1. 글로벌 쿼리 필터 추가
    • TribeDbContext 클래스의 OnModelCreating 메서드를 수정하여 IsActivetrue인 엔터티만 반환하는 글로벌 쿼리 필터를 추가합니다. 예를 들어, State 엔터티에 대한 필터는 다음과 같이 추가됩니다:

      protected override void OnModelCreating(ModelBuilder modelBuilder)
      {
          // 기존 구성 코드...
      
          modelBuilder.Entity<State>().HasQueryFilter(s => s.IsActive);
          modelBuilder.Entity<Tribe>().HasQueryFilter(t => t.IsActive);
      
          // 기타 모델에 대한 필터 설정...
      }
      
    • 이렇게 설정하면, StateTribe 엔터티에 대한 모든 쿼리는 자동으로 IsActivetrue인 엔터티만 반환합니다.

결과

이러한 변경으로 인해, TribeDbContext를 사용하는 모든 쿼리는 기본적으로 IsActivetrue인 엔터티만 포함하게 됩니다. 이는 데이터베이스에서 비활성화된 레코드를 기본적으로 제외하고자 할 때 유용합니다. 예를 들어, 삭제된 또는 비활성화된 데이터를 쿼리에서 자동으로 제외할 수 있습니다.

VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com