Спасибо @ ivan-stoev за указание.В основном, абстрактные свойства игнорируются EF.Если вы хотите указать свойство вашего базового класса, которое будет наследоваться производными классами, вам нужно, чтобы EF создал столбец базы данных, чтобы представить это.Пометка свойства как «виртуального» позволяет EF создать столбец:
public abstract class BaseSchema
{
...
public virtual bool IsFilterRequired { get; set; }
...
}
Кроме того, если у вас есть несколько производных классов, унаследованных от общей базы TPH, это свойство теперь будет доступно всем им.,Если это поведение, которое вам не нужно, вам нужно переопределить его в производных классах, к которым он не принадлежит, и пометить его как не реализованное.Не идеально, но лучше, чем альтернатива, и очень легко будет обнаружить ошибку во время выполнения, которая будет обнаружена в модульном тестировании.
public class DerivedSchemaThatDoesNotNeedThisProperty : BaseSchema
{
...
public override bool IsFilterRequired
{
get { return false; }
set { throw new NotImplementedException($"{nameof(IsFilterRequired)} property is not implemented in this class."); }
}
...
}