2

EF Core 2.0では、クリーナーFluent APIマッピング(source)のためにIEntityTypeConfigurationから派生する機能があります。ベースエンティティでIEntityTypeConfigurationを使用する

基本エンティティを利用するためにこのパターンを拡張するにはどうすればよいですか?下の例では、BaseEntityConfigurationLanguageConfigurationMaintainerConfigurationに複製し、BaseEntityにあるプロパティを変更するにはどうすればよいですか?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

動作確認済み!ありがとう! –

関連する問題