Я определил сущность с именем Variable и производные классы, используя Table Per Hierarchy (TPH).Базовый класс «Variable» содержит коллекцию PropertyValues:
private ICollection<PropertyValue> propertyValues;
public const string DiscriminatorColumn = "Discriminator";
public const string Table = "Variables";
public VariableType VariableType { get; set; }
public string Name { get; set; }
[NotMapped]
public string Discriminator { get; set; }
public virtual ICollection<PropertyValue> PropertyValues
{
get { return this.propertyValues ?? (this.propertyValues = new ObservableCollection<PropertyValue>()); }
set { SetProperty(ref this.propertyValues, value, () => PropertyValues); }
}
Теперь я хочу получить класс SpecialVariable (или более одного), который определяет некоторые SpecialProperties (например, HighLimit), которые должны быть сопоставлены сзапись в PropertyValues (таблица).
public class MySpecialVariabe : Variable
{
public double HighLimit { get; set; }
}
Моя функция OnModelCreating в настоящее время выглядит следующим образом:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Variable>().HasKey(x => new { x.Id });
modelBuilder.Entity<Variable>()
.Map<MySpecialVariabe>(m => m.Requires(Variable.DiscriminatorColumn).HasValue(typeof(MySpecialVariabe).Name))
.Map<MySpecialVariabe2>(m => m.Requires(Variable.DiscriminatorColumn).HasValue(typeof(MySpecialVariabe2).Name)).ToTable(Variable.Table);
}
Может кто-нибудь дать мне несколько советов, как это реализовать, без написания тонныплохо выглядящий код в производном классе.(Производительность не так важна.)
С наилучшими пожеланиями,
Крис