Переиспользование реализации IEntityTypeConfiguration

Доброго времени суток!

Существуют повторяющиеся поля(свойства) в каждой сущности (Дата создания, изменения и т.д.). Если в классах необходимость описания одних и тех же свойств исключается наследованием, то как быть в случае привязки свойств к полям таблиц?

Пример:

BaseFields.cs

    public abstract class BaseFields
    {
      public int FieldA { get; set; }
      public int FieldB { get; set; }
    }

EntityA.cs

    public class EntityA : BaseFields
    {
      public int FieldC { get; set; }
      public int FieldD { get; set; }
    }

EntityAConfiguration.cs

    public class EntityAConfiguration : IEntityTypeConfiguration<EntityA>
    {
      public void Configure(EntityTypeBuilder<DocumentHeaderLink> builder)
      {
        /* Вот тут необходимо переиспользовать реализацию
           IEntityTypeConfiguration<BaseFields>, чтобы не
           писать каждый раз одно и то же описание одних
           и тех же полей (FieldA, FieldB), но чтобы эти
           поля были задействованы в связываемой таблице */

        builder.Property(x => x.FieldC).HasColumnName("field_c").IsRequired();

        builder.Property(x => x.FieldD).HasColumnName("field_d").IsRequired();
      }
    }

Ответы (1 шт):

Автор решения: User
public class EntityAConfiguration : BaseFieldsConfiguration<EntityA> , IEntityTypeConfiguration<EntityA>
{
    public override void Configure(EntityTypeBuilder<EntityA> builder)
    {
        base.Configure(builder);
        builder.Property(x => x.FieldC).HasColumnName("field_c").IsRequired();

        builder.Property(x => x.FieldD).HasColumnName("field_d").IsRequired();
    }
}
public abstract class BaseFieldsConfiguration<T> : IEntityTypeConfiguration<T> where T : BaseFields
{
    public virtual void Configure(EntityTypeBuilder<T> builder)
    {
        builder.Property(p => p.FieldA).HasColumnName("field_a").IsRequired();
        builder.Property(p => p.FieldB).HasColumnName("field_b").IsRequired();
    }
}
→ Ссылка