默认情况下,EF6 会映射一个基本抽象类及其派生类,用于 Table Per Hierarchy (TPH)。
EF Core 不再遵循此逻辑,需要选择加入派生类。文档指出:
按照惯例,在您的 DbSet 属性中公开的类型 上下文作为实体包含在模型中。实体类型 在 OnmodelCreating 方法中指定的也包括在内,任何 通过递归探索导航找到的类型 其他已发现实体类型的属性。
如果您有几个子类型,使用这种方法并不太难,因为您可以将它们添加为 DbSet 或为每个子类型添加一个 HasDiscriminator().HasValue(),映射如下:>
builder.HasDiscriminator()
.HasValue<CommaSymbolRule>("CommaSymbolRule")
.HasValue<DashSymbolRule>("DashSymbolRule")
.HasValue<IsnumericSymbolRule>("IsnumericSymbolRule")
.HasValue<IsPunctuationSymbolRule>("IsPunctuationSymbolRule")
.HasValue<PeriodSymbolRule>("PeriodSymbolRule")
在某些情况下,这是次优的,因为您可能有许多派生类。就我而言,我有一个规则引擎,不想单独映射每个规则。
有没有办法在 EF Core Table Per Hierarchy 场景中自动映射基类的子类型,而无需手动添加它们?