2

EF Core 2.0에서 우리는 더 깨끗한 Fluent API 매핑 (source)을 위해 IEntityTypeConfiguration에서 파생 될 수 있습니다.기본 엔티티에서 IEntityTypeConfiguration 사용

기본 엔터티를 활용하려면 어떻게 패턴을 확장 할 수 있습니까? 아래 예에서 LanguageConfigurationMaintainerConfiguration의 중복을 줄이기 위해 BaseEntityConfiguration을 사용하고 에만있는 속성을 수정하는 방법은 BaseEntityConfiguration입니까? 그런 BaseEntityConfiguration은 어떤 모습일까요? OnModelCreating()은 어떻게 사용됩니까? 예제의 끝 부분에있는 TODO 코드를 참조하십시오.

예 :이 같은

public abstract class BaseEntity 
{ 
    public long Id { get; set; } 
    public DateTime CreatedDateUtc { get; set; } 
    public DateTime? ModifiedDateUtc { get; set; } 
} 

public class Language : BaseEntity 
{ 
    public string Iso6392 { get; set; } 
    public string LocalName { get; set; } 
    public string Name { get; set; } 
} 

public class Maintainer : BaseEntity 
{ 
    public string Email { get; set; } 
    public string Name { get; set; } 
} 

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{ 
    //TODO: Possibly add something like BaseEntityConfiguration? 
    modelBuilder.ApplyConfiguration(new LanguageConfiguration()); 
    modelBuilder.ApplyConfiguration(new MaintainerConfiguration()); 
} 

public class LanguageConfiguration : IEntityTypeConfiguration<Language> 
{ 
    public void Configure(EntityTypeBuilder<Language> entityTypeBuilder) 
    { 
     //TODO: Move this to something like BaseEntityConfiguration? 
     entityTypeBuilder.Property(b => b.CreatedDateUtc).HasDefaultValueSql("CURRENT_TIMESTAMP"); 
    } 
} 

public class MaintainerConfiguration : IEntityTypeConfiguration<Maintainer> 
{ 
    public void Configure(EntityTypeBuilder<Maintainer> entityTypeBuilder) 
    { 
     //TODO: Move this to something like BaseEntityConfiguration? 
     entityTypeBuilder.Property(b => b.CreatedDateUtc).HasDefaultValueSql("CURRENT_TIMESTAMP"); 
    } 
} 

답변

5

뭔가 (테스트되지 않은) 일 수 있을까?

public abstract class BaseEntityTypeConfiguration<TBase> : IEntityTypeConfiguration<TBase> 
    where TBase : BaseEntity 
{ 
    public virtual void Configure(EntityTypeBuilder<TBase> entityTypeBuilder) 
    { 
     //Base Configuration 
    } 
} 

public class MaintainerConfiguration : BaseEntityTypeConfiguration<Maintainer> 
{ 
    public override void Configure(EntityTypeBuilder<Maintainer> entityTypeBuilder) 
    { 
     entityTypeBuilder.Property(b => b.CreatedDateUtc).HasDefaultValueSql("CURRENT_TIMESTAMP"); 
     base.Configure(entityTypeBuilder); 
    } 
} 
+0

감사합니다. 이 솔루션으로 내 OnModelCreating()이 어떻게 보이겠습니까? –

+0

동일해야합니다. 각 Configure() 재정의에서 base.Configure를 호출해야합니다. – CalC

+0

확인 된 작업! 감사! –