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

发布于 2025-01-19 20:34:24 字数 752 浏览 0 评论 0原文

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

abstract class Colour
class Blue : Colour
class Green : Colour

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

我已设置数据库,以便所有颜色都位于一个表中:

public DbSet Blues { get;放; } 公共 DbSet Greens { 获取;放; 当我使用LINQ

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

查询时,我可以执行以下操作:

List<Colours> MyList = MyClass.Colours;

上面的查询返回所有颜色类型的列表。

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

Here's a .NET EF Core simplified scenario that I have been working on:

abstract class Colour
class Blue : Colour
class Green : Colour

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

I have set the database up so that all colours are in one table:

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

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

When I am querying using LINQ, I can do the following:

List<Colours> MyList = MyClass.Colours;

The above query returns a list of all colour types.

My question is this. How do I do a direct LINQ query to retrieve all colours? It is not possible to do: DbContext.Colours. The options that I have are DbContext.Blues and DbContext.Greens. Another scenario is when I want to retrieve a Colour but I do not know what type it is.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

失退 2025-01-26 20:34:24

如何进行直接查询来检索所有颜色?

您已经将颜色配置为dbContext中的实体,因此可以sip缩写

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; }

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

You've already configured Color as an entity in your DbContext, so you can siply write

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

Or add a DbSet for it:

  public DbSet<Blue> Blues { get; set; }
  public DbSet<Green> Greens { get; set; }
  public DbSet<Color> Colors{ get; set; }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文