缺省情况下,EF6 采用表继承的方法来映射基础抽象类及其派生类。
然而 EF Core 不再遵循这一逻辑,需要明确选择要包含的派生类。文档中指出:
按照惯例,在上下文中公开的 DbSet 属性中公开的类型将作为实体包含在模型中。在 OnModelCreating 方法中指定的实体类型也将被包括在内,以及通过递归地探索其他发现的实体类型的导航属性找到的任何类型。
如果您只有几个子类型,使用此方法不会太难,只需将它们添加为 DbSets 或添加一个 HasDiscriminator().HasValue(),并按以下方式进行映射:
builder.HasDiscriminator()
.HasValue<CommaSymbolRule>("CommaSymbolRule")
.HasValue<DashSymbolRule>("DashSymbolRule")
.HasValue<IsNumericSymbolRule>("IsNumericSymbolRule")
.HasValue<IsPunctuationSymbolRule>("IsPunctuationSymbolRule")
.HasValue<PeriodSymbolRule>("PeriodSymbolRule")
在某些情况下,这可能不是最佳选择,因为您可能有许多派生类。在我的情况下,我有一个规则引擎,不想每个规则都要进行映射。是否有一种方法可以在EF Core Table Per Hierarchy场景中自动映射基类的子类型而无需手动添加它们?