Переиспользование реализации 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();
}
}