Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Entity Framework Core 2.0:Como configurar a classe base abstrata uma vez


Se entendi corretamente, o Status é apenas uma classe base e não uma entidade base participando da Herança de Banco de Dados.

Nesse caso, é importante nunca se referir a Status class diretamente dentro do modelo e configuração da entidade, ou seja, sem DbSet<Status> , nenhuma propriedade de navegação do tipo Status ou ICollection<Status> , não modelBuilder.Entity<Status>() chamadas e sem IEntityTypeConfiguration<Status> .

Em vez disso, você sempre tem que se referir aos tipos concretos herdados do Status . Para reutilizar o código de configuração, você deve usar genérico restrito métodos ou classes e passar os tipos de entidade concretos.

Como você está usando IEntityTypeConfiguration classes, provavelmente o mais natural é fazer seu StatusConfiguration classe genérica:
public class StatusConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
    where TEntity : Status
{
    public virtual void Configure(EntityTypeBuilder<TEntity> builder)
    {
        builder.Property(c => c.updateUserName).IsRequired().HasMaxLength(50);
    }
}

e deixe as classes de configuração de entidade derivadas derivarem dele:
public class ItemConfiguration : StatusConfiguration<Item>
{
    public override void Configure(EntityTypeBuilder<Item> builder)
    {
        base.Configure(builder); // <--
        builder.ToTable("Item", "dbo").HasKey(c => c.Id);
        builder.Property(c => c.Description).IsRequired().HasMaxLength(100);
    }
}