EntityFramework를 사용한 Code First 접근법으로 데이터베이스 설계: 유일성 제약 조건 추가

이번 글에서는 Entity Framework의 Code First 접근법을 사용하여 데이터베이스에 매핑된 클래스의 특정 속성(즉, 데이터베이스의 특정 열)에 유일성 제약 조건을 설정하는 방법과 초기화 과정을 설명합니다.

User 클래스는 이미 익숙하실 것입니다. UserID는 기본 키이므로 중복되지 않습니다. 그러나 다른 속성들에 대해서도 비즈니스 요구사항에 따라 유일성을 보장해야 할 수 있습니다. 예를 들어, LoginName, PhoneNumber, Email 속성은 각각 유일해야 합니다. 이러한 속성들에 유일성 제약 조건을 추가하는 방법을 살펴보겠습니다.

먼저, DropCreateOrderDatabaseWithSeedValueAlways 클래스에서 Seed 메서드를 오버라이드하여 유일성 제약 조건을 등록할 수 있습니다. 이 메서드 내에서 SQL 명령어를 실행하여 필요한 제약 조건을 추가합니다.

public class DropCreateOrderDatabaseWithSeedValueAlways : DropCreateDatabaseAlways<BlogContext>
{
    protected override void Seed(BlogContext context)
    {
        context.Database.ExecuteSqlCommand("ALTER TABLE UserInfo ADD CONSTRAINT con_Unique_UserInfoes_LoginName UNIQUE (LoginName)");
        context.Database.ExecuteSqlCommand("ALTER TABLE UserInfo ADD CONSTRAINT con_Unique_UserInfoes_PhoneNumber UNIQUE (PhoneNumber)");
        context.Database.ExecuteSqlCommand("ALTER TABLE UserInfo ADD CONSTRAINT con_Unique_UserInfoes_Email UNIQUE (Email)");
    }
}

다음으로, BlogContext 클래스의 OnModelCreating 메서드를 살펴보겠습니다. 현재 User 클래스에 대한 설정 코드가 여러 줄로 구성되어 있어 유지 관리가 어려울 수 있습니다. 이를 개선하기 위해 EntityTypeConfiguration을 사용하여 설정 정보를 분리하겠습니다.

EntityConfig 폴더에 User 클래스의 설정 정보를 담은 UserConfig 클래스를 생성합니다.

public class UserConfig : EntityTypeConfiguration<User>
{
    public UserConfig()
    {
        this.ToTable("UserInfo");
        this.Property(s => s.Password).IsRequired().HasMaxLength(128);
        this.Property(s => s.LoginName).IsRequired().HasMaxLength(20);
        this.Property(s => s.PhoneNumber).HasMaxLength(20);
        this.Property(s => s.Email).HasMaxLength(128);
    }
}

이제 BlogContext 클래스의 OnModelCreating 메서드에서 UserConfig 클래스를 등록하면 됩니다.

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new UserConfig());
}

태그: EntityFramework CodeFirst C# DbContext EntityTypeConfiguration

8월 4일 08:09에 게시됨