2011-11-30 3 views
10

나는 Entity Framework Code First를 사용하여 다소 큰 데이터베이스 스키마를 개발 중이다. 내 도메인 객체를 단순한 POCO로 남기기 때문에 Data Annotations 방식보다 Fluent API를 선호합니다.Entity Framework 코드는 먼저 개별 파일에서 유창한 매핑을 허용합니까?

Fluent API를 사용하려면 DbContext에서 상속하는 클래스에서 OnModelCreating을 재정의해야합니다.

모든 엔티티에 대한 모든 매핑이이 방법에있는 것이 마음에 들지 않습니다. 전에 FluentNHibernate와 같은 것을 사용했습니다. 각 엔티티에는 고유 한 매핑 클래스가 있습니다. EF에 비슷한 것이 있습니까?

매핑 클래스를 구현하고 OnModelCreating 메서드 내에서 모두 호출 할 수있는 자체 인터페이스를 만들 수 있다고 가정합니다. 리플렉션 또는 IoC를 사용하여 모든 것을 발견 할 수있었습니다. 특히이 방법에 문제가있는 것은 아닙니다만, Entity Framework에 이미이 기능이 포함되어 있는지 궁금합니다.

답변

27

EntityTypeConfiguration<TEntity>에서 파생 된 엔티티 당 하나의 구성 클래스를 만들고이 클래스를 별도의 파일에 넣을 수 있습니다. 파생 된 DbContext에서 이러한 구성 클래스의 인스턴스를 모델 작성기에 추가합니다. 예 :

public class UserConfiguration : EntityTypeConfiguration<User> 
{ 
    public UserConfiguration() 
    { 
     HasKey(u => u.UserName); 

     Property(u => u.UserName) 
      .HasMaxLength(50) 
      .IsRequired(); 

     // etc. 
    } 
} 

public class RoleConfiguration : EntityTypeConfiguration<Role> 
{ 
    public RoleConfiguration() 
    { 
     HasKey(r => r.RoleName); 

     // etc. 
    } 
} 

파생 컨텍스트 : 또한 ComplexTypeConfiguration<T> 있습니다

public class MyContext : DbContext 
{ 
    //... 

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

당신은 복잡한 유형을 구성하는 데에서 파생 할 수 있습니다.

+3

+1 'ComplexTypeConfiguration'에 대한 언급 포함 ' – vossad01

+0

일반적으로이 접근 방식이 좋은 방법으로 간주됩니까? –

+1

대규모 복잡한 모델을 다룰 때 거의 필요합니다. 그렇지 않으면 하나의 OnModelCreating 메소드에 모든 것을 넣어야합니다. – Tony