您可以使用继承来做到这一点。如果你已经考虑过了,我很抱歉。代码如下。
public abstract class WidgetBase
{
public string Name { get; set; }
}
public class SweetWidget : WidgetBase
{
public int SweetnessFactor { get; set; }
}
public class SourWidget : WidgetBase
{
public int Sourness { get; set; }
}
然后在您的模型配置中,您执行以下操作:
const string discriminator = "WidgetType";
Map<SweetWidget>(mc => mc.Requires(discriminator).HasValue("Sweet"));
Map<SourWidget>(mc => mc.Requires(discriminator).HasValue("Sour"));
您需要在表格中添加一列“WidgetType”。然后,EF 将按照映射中的指定填充它。
请注意,基类必须是抽象的。只要您的表包含所有派生类的所有字段,这就是您在 EF Code First 中执行 Table Per Hierarchy 的方式。