【发布时间】:2021-01-21 00:03:38
【问题描述】:
默认情况下,EF6 将映射一个基本抽象类及其为每个层次结构 (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 场景中自动映射基类的子类型,而无需手动添加它们?
【问题讨论】:
标签: c# entity-framework .net-core entity-framework-core discriminator