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可以包含在同一个请求中?
这是Google Groups邮件列表中的特定主题。
Ayende还提到了他在该主题中的一篇博客文章,其中他涵盖了这个概念。