我使用 Table Per Hierarchy (TPH) 定义了一个名为变量和派生类的实体。基类“变量”包含一组 PropertyValue:
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 类(或多个),它定义了一些应该映射到 PropertyValues(表)中的条目的 SpecialProperties(例如 HighLimit)。
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);
}
有人可以给我一些提示如何实现这一点,而无需在派生类中编写大量难看的代码。(性能并不那么重要。)
最好的祝福,
克里斯