提问者:小点点

用实体框架核心和脚手架处理“动态外键列”


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

特别之处在于,此列没有任何约束。因此您可以将任何uniqueidentifier-value放入此列。我们有一个额外的“type”-列来确定uniqueidentifier指向哪个表。

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

我们的问题:

当我们用dotnet ef构建DbContext时,ef核心不能通过“pk_id”列识别与其他表的关系。那也不足为奇。

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

我希望这在某种程度上是可以理解的。如何在EntityFramework核心内最好地处理这个问题?有没有办法使用像“include”这样的方法呢?


共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();