1

如果我存储了如下所示的文档:

Category {
    public string Id {get;set;}
    public List<Category> Categories {get;set;}
    ...
}

本质上是一个类别,带有子类别。就我而言,只有 2 个级别(1 个父级,n 个子类别)。

查询所有类别效果很好,显示了一个不错的列表(也有嵌套的子类别列表)。我的用户只能单击一个子类别来查看所选类别中的内容。我想拉出 1 个子类别,作为Category.

给定一个子类别 ID,我将如何将其中一个子类别拉出来,因为它是独立的Category

更新

我想补充一下,我通过这样做来解决这个问题:

        Category pCat = RavenSession.Query<Category>().Where(x => x.Categories.Any(c => c.Id == id)).FirstOrDefault();
        Category cat = pCat.Categories.Where(x => x.Id == id).FirstOrDefault();

首先获取包含子类别的类别,然后查询该类别上的子类别以拉取特定的子类别。

也许这更好,我不知道......但似乎它正在执行 2 个步骤,而 1 就足够了。

更新 2

这些类别中的所有 id 都是手动添加的,没有 RavenDB 自动 id(即使是子类别也有一个 Id)。

4

1 回答 1

2

您的Categories属性包含一个对象列表,您可以在其中拥有嵌套类别的 ID。子类别,您构建它的方式,不会有 id,只有数据。

Category {
    public string Id {get;set;}
    public List<Category> Categories {get;set;}
    ...
}

而是尝试这个模型和这个查询:

Category {
    public string Id {get;set;}
    public List<string> CategoryIDs {get;set;}
    ...
}

var parent = session
    .Include(i => i.CategoryIDs)
    .Load<Category>("category/1");

var children= session.Load<Category>(parent.CategoryIDs);

一个警告:我没有测试这个代码,因为我现在没有一个项目来测试它,但这里是我的来源:

  1. http://ayende.com/blog/4584/ravendb-includes
  2. RavenDB 包含 - Session.Load<T>(string[] ids)
  3. http://richarddingwall.name/2012/03/08/ravenb-includes-much-simpler-than-you-think/
于 2012-06-06T17:57:05.723 回答