Entity Framework Core에서 HasQueryFilter와 HasDefaultValue 활용하기

  • 3 minutes to read

Entity Framework Core (EF Core)는 데이터 접근을 위한 .NET의 현대적인 객체 관계 매퍼 (ORM)입니다. 데이터 모델링 시 EF Core의 Fluent API를 활용하면 데이터베이스 스키마를 세밀하게 제어할 수 있습니다. 특히 HasQueryFilterHasDefaultValue 메서드는 데이터 쿼리와 입력을 효과적으로 관리할 수 있게 해줍니다.

HasQueryFilter의 사용

HasQueryFilter 메서드는 특정 조건에 맞는 데이터만 조회할 수 있도록 하는 글로벌 필터를 설정합니다. 이 글로벌 필터는 모델 클래스에 적용되어, DbContext를 통한 모든 쿼리에 자동으로 적용됩니다. 예를 들어, 시스템의 '활성화된' 데이터만 조회하고 싶을 때 유용합니다.

modelBuilder.Entity<MyEntity>()
    .HasQueryFilter(e => e.IsActive);

위 코드는 IsActive 속성이 trueMyEntity 인스턴스만을 조회합니다. 이는 '삭제된' 레코드를 숨기거나, 특정 테넌트의 데이터만을 조회하는 멀티테넌시 시스템에서 유용하게 사용할 수 있습니다.

HasDefaultValue의 사용

HasDefaultValue 메서드는 특정 엔터티의 속성에 기본값을 설정합니다. 데이터베이스에 새 레코드가 추가될 때 해당 필드에 값이 제공되지 않으면, EF Core는 설정된 기본값을 사용합니다.

modelBuilder.Entity<MyEntity>()
    .Property(e => e.DateCreated)
    .HasDefaultValueSql("GETDATE()");

위 코드는 DateCreated 속성에 대해 SQL 서버의 GETDATE() 함수를 호출하여 기본값을 설정합니다. 이는 데이터가 생성된 시각을 자동으로 기록하는 데 사용됩니다.

실제 사용 예시

실제 시스템에서는 종종 '활성화' 상태를 나타내는 Active 필드가 있으며, 이 필드를 기반으로 데이터를 필터링합니다. 아래 코드는 Active 필드에 글로벌 필터를 적용하고 기본값을 true로 설정하는 방법을 보여줍니다.

modelBuilder.Entity<AuditTrailRecord>()
    .HasQueryFilter(x => x.Active)
    .Property(x => x.Active)
    .HasDefaultValue(true);

정리

HasQueryFilterHasDefaultValue는 EF Core에서 강력한 데이터 관리 기능을 제공합니다. HasQueryFilter는 애플리케이션 전반에 걸쳐 일관된 데이터 뷰를 유지하는 데 도움을 주며, HasDefaultValue는 데이터 무결성을 유지하면서 입력 과정을 간소화합니다. 이러한 기능들을 적절히 활용하면 개발자는 더 강력하고 유지보수가 쉬운 데이터 액세스 레이어를 구축할 수 있습니다.

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