我一直在关注 this tutorial 与 EF Core 建立适当的多对多关系。我已经实现了作者所说的直接关系。在此示例之前,一切正常:
<块引用>var books = context.Books.Tags.Select(t => t.TagId).ToList()
VS 返回一个错误,指出 DbSet 不包含标签的定义。我不明白是什么导致了这种情况,因为数据库实现得很好,并且使用 MSSQL 查询它按预期工作。例如,我能够做到:
SELECT c.*
FROM Books o
JOIN BookTags ot ON ot.BooksBookId = o.TagId
JOIN Tags c ON ot.TagsTagId = c.TagId
WHERE o.BookId = 1
并获取 ID = 1 的 Book 标签列表。理想情况下,我希望使用 EF Core 获得相同的结果,但我真的不明白这里出了什么问题。非常感谢任何帮助。
答案 0 :(得分:0)
您不能像这样加载导航属性。要加载具有导航属性的图书,请使用:
var books = context.Books.Include(b => b.Tags).ToList();
要仅获取 ID,您可以使用:
var tagIds = context.Books.SelectMany(b => b.Tags).Select(t => t.TagId).ToList();