RavenDB -子实体包括

本文关键字:包括 实体 RavenDB | 更新日期: 2023-09-27 17:53:38

我以前见过这个问题,但它从来没有得到解决-它不是很清楚原来的海报,所以我再试一次更清楚。

给定下面的模拟结构…

public class Container {
    public string Id { get; set; }
    public List<Entity> Entities { get; set; }
}
public class Entity {
    public string Id { get; set; }
    public List<string> Sub_Entities { get; set; }
}
public class Sub_Entity {
    public string Id { get; set; }
    public List<string> Sub_Entities { get; set; }
}

这意味着Sub_Entity永远不会被反规范化,所以它的相关id不存在于实际的JSON对象上,所以我最终得到了这样一个对象。

======= "containers/1" =======

{
    "Entities" : [
        {
            "Id" : "entities/1",
            "Sub_Entities" : [
                "sub_entities/1",
                "sub_entities/2",
                "sub_entities/3"
            ]
        }
    ]
}

======= "sub_entities/1" =======

{
    "Sub_Entities" : [
        "sub_entities/4",
        "sub_entities/5",
        "sub_entities/6"
    ]
}

======= "sub_entities/2" =======

{
    "Sub_Entities" : [
        "sub_entities/7",
        "sub_entities/8",
        "sub_entities/9"
    ]
}

======= "sub_entities/3" =======

{
    "Sub_Entities" : [
        "sub_entities/10",
        "sub_entities/11",
        "sub_entities/12"
    ]
}

现在我想真正优化从数据库中提取这些数据的方式。因此,我首先在初始容器中包含sub_entities。

我是这样做的:

var container = DocumentSession
    .Include("Entities,Id")
    .Include("Entities,Sub_Entities")
    .Load<Container>("containers/1");

我还使用下列谓词完成了它。

var container = DocumentSession
    .Include<Container>(n => n.Entities.SelectMany( y => y.Id ) )
    .Include<Container>(n => n.Entities.SelectMany( y => y.Sub_Entities ))
    .Load<Container>("containers/1");

这让我在一个请求中获得sub_entities的初始集,但是我可以做些什么来查询更深,以确保嵌套的sub_entities可以包含在同一个请求中?

RavenDB -子实体包括

这是Google Groups邮件列表中的特定主题。

Ayende还提到了他在该主题中的一篇博客文章,其中他涵盖了这个概念。