Entity Framework Core 2.0: Como configurar a classe base abstrata uma vez
Eu tenho um modelo base:
public abstract class Status
{
public string updateUserName { get; set; }
}
Em seguida, um modelo que estende o modelo básico definido acima:
public class Item : Status
{
public int Id { get; set; }
public string Description { get; set; }
}
Então eu defini classes de configuração para cada um:
public class ItemConfiguration : IEntityTypeConfiguration<Item>
{
public void Configure(EntityTypeBuilder<Item> builder)
{
builder.ToTable("Item", "dbo").HasKey(c => c.Id);
builder.Property(c => c.Description).IsRequired().HasMaxLength(100);
}
}
public class StatusConfiguration : IEntityTypeConfiguration<Status>
{
public void Configure(EntityTypeBuilder<Status> builder)
{
builder.Property(c => c.updateUserName).IsRequired().HasMaxLength(50);
}
Agora, eu tenho a seguinte classe Context:
public class TestDbContext : DbContext
{
public TestDbContext(DbContextOptions<TestDbContext> options) : base(options)
{
}
public DbSet<Item> Item { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new ItemConfiguration());
}
}
Estou tentando descobrir como aplicar as configurações do modelo Status definidas na classe StatusConfiguration a todos os modelos que se estendem a ela (apenas um neste exemplo: Item). Eu gostaria de evitar definir a mesma configuração do modelo de status toda vez que ela for usada. O modelo Status será essencialmente metadados associados a cada registro de Item (ou seja, uma tabela de Itens no banco de dados que contém todas as propriedades definidas nos dois modelos; nada mais e nada menos).
Por exemplo, minha implementação atual é a seguinte classe ItemConfiguration sem usar a classe StatusConfiguration:
public class ItemConfiguration : IEntityTypeConfiguration<Item>
{
public void Configure(EntityTypeBuilder<Item> builder)
{
builder.ToTable("Item", "dbo").HasKey(c => c.Id);
builder.Property(c => c.Description).IsRequired().HasMaxLength(100);
builder.Property(c => c.updateUserName).IsRequired().HasMaxLength(50);
}
}
Essa implementação atual funciona corretamente e migra para o banco de dados conforme pretendido. Estou simplesmente procurando uma maneira mais gerenciável daqui para frente.
Minha suposição é que eu poderia estender a classe ItemConfiguration para incluir a classe StatusConfiguration, mas não consigo encontrar um exemplo desse método online. Espero que alguém com um pouco mais de experiência possa me indicar a direção certa.
Deixe-me saber se informações adicionais seriam úteis.