我有一个'文件夹'实体。每个文件夹都有对其父文件夹的引用,允许标准树结构。每个文件夹也可以包含一系列项目,让我们称之为“文章'”。一篇文章有一个标题和一个正文。鉴于根文件夹的ID,我想检索所有子文件夹及其文章。但是,我想只检索文章标题,而不是它的正文。我打算在树视图中显示文件夹结构,我只想在用户在树视图中选择文章时检索完整的文章。
我已经建立了这样的关系:
public class Folder: EntityBase
{
public string Name { get; set; }
public Guid ParentId { get; set; }
[ForeignKey(nameof(ParentId))]
public Folder Parent { get; set; }
public ICollection<Folder> Folders { get; set; }
public ICollection<Article> Articles { get; set; }
}
public class Article : EntityBase
{
public Guid FolderId { get; set; }
[ForeignKey(nameof(FolderId))]
public Folder Folder { get; set; }
// this needs to appear in the list
public string Title { get; set; }
// potentially large amount of data, retrieve only as necessary
public string Body { get; set; }
...
}
我无法弄清楚如何告诉Entity Framework递归遍历所有子文件夹及其子文件夹等等。我必须在我的代码中实现递归吗?这似乎有点低效。有没有一种首选的方法来处理这个问题? 另外,我如何只检索文章的标题字段,而不是全身?
答案 0 :(得分:0)
我是否必须在我的代码中实现递归
从客户端递归加载的替代方法是使用单个查询加载所有文件夹,并让EF修复关系。如果您不想加载所有文件夹,则可以将SQL查询仅用于特定文件夹下的文件夹(例如,使用递归CTE)。
如何只检索文章的标题字段,而不是全身
EF不支持部分加载单个实体,但您可以使用&#34; Table Splitting&#34;将ArticleBody拆分为单独的实体,即使它位于同一个表中。