关于EF Core中的Discriminator,有没有办法设置基类的所有值?

A Y*_*Y B 7 c# discriminator entity-framework-core

我希望在检索基类时,我应该获取表中的所有行,而不考虑鉴别器。我只想在检索派生类之一时使用鉴别器。我怎样才能做到这一点?

我尝试的第一件事是只为派生类设置 HasValue,而不是像这样的基类......

modelBuilder.Entity<BaseClass>(entity =>
{
   entity.HasDiscriminator(e => e.DiscriminatorProperty)
     // .HasValue<BaseClass>()
     .HasValue<DerivedClass1>(1)
     .HasValue<DerivedClass2>(2);
});
Run Code Online (Sandbox Code Playgroud)

...但这给了我以下错误:

System.Private.CoreLib.dll 中发生“System.InvalidOperationException”类型的异常,但未在用户代码中进行处理:“实体类型“BaseClass”是层次结构的一部分,但没有配置鉴别器值。”

我尝试的另一件事是为每个可能的鉴别器值配置 BaseClass,如下所示......

modelBuilder.Entity<BaseClass>(entity =>
{
   entity.HasDiscriminator(e => e.DiscriminatorProperty)
     .HasValue<BaseClass>(1)
     .HasValue<BaseClass>(2)
     .HasValue<DerivedClass1>(1)
     .HasValue<DerivedClass2>(2);
});
Run Code Online (Sandbox Code Playgroud)

...但是当实际尝试检索基类时,我只得到了鉴别器值为 1 的记录。EF Core 似乎只识别第一个配置并忽略下一个配置。

所以我的问题是如何专门为派生类而不是基类配置鉴别器?换句话说,当检索基类时,我应该获取表中的所有记录。

Lys*_*Lys 0

为了避免层次结构问题,您需要将基类标记为抽象类。(您的模型构建器只需要派生类,而不需要基类)