2017-05-03 4 views
4

는 그와 같은 기본 클래스가 있습니다

public class BaseClass : IEditableObject { 

    public BaseClass() { 

    } 

    public Guid Id { get; set; } 

    public void BeginEdit() { 

    } 
    public void CancelEdit() { 

    } 
    public void EndEdit() { 

    } 
} 

을 그리고 난 그런이 개 파생 클래스가 있습니다

public class User : BaseClass { 

    [Column("UserFirstName")] 
    public string FirstName { 
     get; 
     set; 
    } 

    [Column("UserLastName")] 
    public string LastName { 
     get; 
     set; 
    } 
} 

public class School : BaseClass { 
    [Column("SchoolName")] 
    public string Name { 
     get; 
     set; 
    } 
} 

나는를 Entity Framework Code-First를 사용하고 내 컨텍스트 클래스에서 다음 클래스를 구성하십시오.

public class MyContext : DbContext { 

    public MyContext() : base() { 
     Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, Configuration>()); 
    } 

    public DbSet<User> Users { get; set; } 

    public DbSet<School> Schools { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
     base.OnModelCreating(modelBuilder); 
    } 

} 

프로그램 데이터베이스와 테이블이 생성되지만 각 테이블에 대한 기본 키 열 이름은 Id입니다. 열의 이름을 사용자 ID 또는 SchoolId으로 지정합니다.

따라서 나는 TableNameId에 열 이름을 변경 만드는 모델에 엔티티를 구성해야 나뿐만 아니라이 일을 할 수

: 나는 클래스의 수백을 가지고

modelBuilder.Entity<User>().Property(i => i.Id).HasColumnName("UserId"); 
modelBuilder.Entity<School>().Property(i => i.Id).HasColumnName("SchoolId"); 

이 가정을, 나는거야 각 엔티티마다 구성을 하나씩 구성해야하므로 엄청난 시간 낭비입니다.

반복 작업이나 다른 작업을 사용하여이 작업을 어떻게 동적으로 수행 할 수 있습니까?

답변

4

당신은 모든 BaseClass 파생 된 엔티티에 사용자 정의 규칙을 적용 할 DbModelBuilder.Types<T> 방법을 사용할 수 있습니다 :

modelBuilder.Types<BaseClass>().Configure(c => 
    c.Property(e => e.Id).HasColumnName(c.ClrType.Name + "Id") 
); 
+0

감사합니다. Ivan. 그것은 내 상황에 대한 해답이다. –

3

Custom Code First Conventions을 사용할 수 있습니다. 귀하의 경우 :

modelBuilder.Properties().Where(p => p.Name == "Id") 
      .Configure(c => c.HasColumnName(c.ClrPropertyInfo.ReflectedType.Name + "Id")); 
+0

내가 솔루션 만 열 이름이 지금 BaseId된다 시도했다. –

+0

아, 예, 변경 사항을 확인하십시오. –

+0

내 작품을 준비 할 때이 글을 올렸으므로 기본적으로 답변을 게시 한 이후로 게시해야하는지 궁금합니다. 결국 기록을 위해 그것을 게시하기로 결정 :) +1 –