我正在将我的.NET Framework (EF6) 代码转换为ASP.NET Core (EF Core),在这个过程中遇到了问题。以下是一些示例代码:
在EF6中,我使用Include()和Select()进行急加载:
return _context.Post
.Include(p => p.PostAuthor.Select(pa => pa.Author).Select(a => a.Interests))
PostAuthor是一个连接表,还有一个连接表"AuthorInterest",在EF6中我不需要涉及它(选择直接到a.Interests)。
无论如何,我可以看到在EF7中这已经重新组织了,这意味着我现在应该使用ThenInclude()进行嵌套查询。 但是...
return _context.Post
.Include(p => p.PostAuthor)
.ThenInclude(pa => pa.Select(pa2 => pa2.Author))
...etc
上述代码因为Select()语句而失败。在https://docs.efproject.net/en/latest/querying/related-data.html上的文档似乎暗示我不需要它,可以直接访问Author,但是最后一个lambda表达式中显示了ICollection,所以显然我需要Select()。在查询中,我还需要通过多个连接表,但为简单起见,我们只关注第一个连接表。如何使其工作?
db.Parents.Include(p => p.Children).ThenInclude(c => c.Child).ThenInclude(c => c.Parents)
这样的代码时,每个lambda表达式都能得到正确的智能感知支持。 - Ivan Stoev