c# - 使用 Entity Framework Core 和脚手架处理“动态外键列”
问题描述
我们的数据库设计中有一些表,其中包括一个名为“PK_ID”的列。此列来自类型“uniqueidentifier”(Guid)。uniqueidentifier 指向另一个表中的实体。所以它基本上是一个外键列。
特殊的是,这一列没有约束。因此,您可以在此列中放置任何唯一标识符 - 值。我们有一个额外的“类型”列来确定唯一标识符指向哪个表。
这当然不符合数据库设计的良好规则,但在我们的应用程序上下文中是必要的,这不是重点。
我们的问题:
当我们使用 EF Core 搭建 DbContext 时,dotnet ef dbcontext scaffold
无法通过“PK_ID”列识别与其他表的关系。这也不足为奇。
但正因为如此,我们不能使用“Include”和“IncludeThen”方法来构建 SQL-Join 查询。
我希望这有点可以理解。如何在 EntityFramework Core 中最好地处理这个问题?有没有办法使用像“包含”这样的方法?
解决方案
您可以在查询时使用流利的语法,这样您就可以指定如何加入
语法如下所示:取自这里: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();