使用单个 Table 时的 EF Core 继承查询

EF Core Inheritance Queries When Using a Single Table

这是我一直在研究的 .NET EF Core 简化方案:

abstract class Colour
class Blue : Colour
class Green : Colour

class MyClass {
  public List<Colour> Colours { get; set; }
}

我已经设置了数据库,所有颜色都集中在一个 table:

public DbSet Blues { get;放; } public DbSet Greens { get;放; }

builder.Entity<Colour>()
.ToTable("Colours")
.HasDiscriminator<int>("ColourType")
.HasValue<Blue>((int)ColourType.Blue)
.HasValue<Green>((int)ColourType.Green);

当我使用 LINQ 进行查询时,我可以执行以下操作:

List<Colours> MyList = MyClass.Colours;

以上查询returns所有颜色类型的列表。

我的问题是这样的。如何执行直接 LINQ 查询来检索所有颜色?不可能做到:DbContext.Colours。我的选项是 DbContext.Blues 和 DbContext.Greens。另一种情况是当我想检索颜色但我不知道它是什么类型时。

How do I do a direct LINQ query to retrieve all colours?

您已经将 Color 配置为 DbContext 中的实体,因此您可以简单地编写

var colors = db.Set<Color>().ToList();

或者为其添加一个DbSet:

  public DbSet<Blue> Blues { get; set; }
  public DbSet<Green> Greens { get; set; }
  public DbSet<Color> Colors{ get; set; }