Entity Framework Core에서 HasQueryFilter와 HasDefaultValue 활용하기
Entity Framework Core (EF Core)는 데이터 접근을 위한 .NET의 현대적인 객체 관계 매퍼 (ORM)입니다. 데이터 모델링 시 EF Core의 Fluent API를 활용하면 데이터베이스 스키마를 세밀하게 제어할 수 있습니다. 특히 HasQueryFilter
와 HasDefaultValue
메서드는 데이터 쿼리와 입력을 효과적으로 관리할 수 있게 해줍니다.
HasQueryFilter의 사용
HasQueryFilter
메서드는 특정 조건에 맞는 데이터만 조회할 수 있도록 하는 글로벌 필터를 설정합니다. 이 글로벌 필터는 모델 클래스에 적용되어, DbContext를 통한 모든 쿼리에 자동으로 적용됩니다. 예를 들어, 시스템의 '활성화된' 데이터만 조회하고 싶을 때 유용합니다.
modelBuilder.Entity<MyEntity>()
.HasQueryFilter(e => e.IsActive);
위 코드는 IsActive
속성이 true
인 MyEntity
인스턴스만을 조회합니다. 이는 '삭제된' 레코드를 숨기거나, 특정 테넌트의 데이터만을 조회하는 멀티테넌시 시스템에서 유용하게 사용할 수 있습니다.
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);
정리
HasQueryFilter
와 HasDefaultValue
는 EF Core에서 강력한 데이터 관리 기능을 제공합니다. HasQueryFilter
는 애플리케이션 전반에 걸쳐 일관된 데이터 뷰를 유지하는 데 도움을 주며, HasDefaultValue
는 데이터 무결성을 유지하면서 입력 과정을 간소화합니다. 이러한 기능들을 적절히 활용하면 개발자는 더 강력하고 유지보수가 쉬운 데이터 액세스 레이어를 구축할 수 있습니다.