【问题标题】:Handle "dynamic Foreign Key columns" with Entity Framework Core and scaffolding使用 Entity Framework Core 和脚手架处理“动态外键列”
【发布时间】:2020-11-10 23:14:27
【问题描述】:

我们的数据库设计中有一些表,其中包括一个名为“PK_ID”的列。此列来自类型“uniqueidentifier”(Guid)。 uniqueidentifier 指向另一个表中的实体。所以它基本上是一个外键列。

特别的是这个列没有约束。因此,您可以在此列中放置任何唯一标识符 - 值。我们有一个额外的“类型”列来确定唯一标识符指向哪个表。

这当然不符合数据库设计的良好规则,但在我们的应用程序上下文中是必要的,这不是重点。

我们的问题:

当我们使用 dotnet ef dbcontext scaffold 构建 DbContext 时,EF Core 无法通过“PK_ID”列识别与其他表的关系。这也不足为奇。

但正因为如此,我们不能使用“Include”和“IncludeThen”方法来构建 SQL-Join 查询。

我希望这有点可以理解。如何在 EntityFramework Core 中最好地处理这个问题?有没有办法使用“包含”之类的方法?

【问题讨论】:

  • 目前 EF Core 仅支持物理强制数据库关系。您要问的是所谓的“多态关联”并且不受支持,这意味着您无法将其映射到导航属性,因此您无法使用Include
  • 谢谢! “多态关联”是我搜索的技术术语。现在我在谷歌上发现了更多:D

标签: c# entity-framework-core foreign-keys


【解决方案1】:

您可以在查询时使用流畅的语法,以便指定如何加入

语法如下:取自这里:https://entityframework.net/joining)

var data = context.Authors
    .Join(
        context.Books,
        author => author.AuthorId,
        book => book.Author.AuthorId,
        (author, book) => new
        {
            BookId = book.BookId,
            AuthorName = author.Name,
            BookTitle = book.Title
        }
    ).ToList();

【讨论】:

  • 太棒了!正是我想要的。
猜你喜欢
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-22
  • 1970-01-01
相关资源
最近更新 更多