首页 > 解决方案 > 使用 Entity Framework Core 和脚手架处理“动态外键列”

问题描述

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

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

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

我们的问题:

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

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

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

标签: c#entity-framework-coreforeign-keys

解决方案


您可以在查询时使用流利的语法,这样您就可以指定如何加入

语法如下所示:取自这里: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();

推荐阅读