この質問が以前に投稿されたのを見たことがありますが、解決されませんでした。元の投稿者ではあまり明確ではなかったので、もう少し明確に再試行しています。
次のモック構造を考えると...
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 オブジェクトには存在しないため、最終的にこのようなオブジェクトになります。
======= 「コンテナ/1」 =======
{
"Entities" : [
{
"Id" : "entities/1",
"Sub_Entities" : [
"sub_entities/1",
"sub_entities/2",
"sub_entities/3"
]
}
]
}
======= "サブエンティティ/1" =======
{
"Sub_Entities" : [
"sub_entities/4",
"sub_entities/5",
"sub_entities/6"
]
}
======= "サブエンティティ/2" =======
{
"Sub_Entities" : [
"sub_entities/7",
"sub_entities/8",
"sub_entities/9"
]
}
======= "サブエンティティ/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");
これにより、1 つのリクエストで sub_entities の初期セットが取得されますが、ネストされた sub_entities を同じリクエストに確実に含めることができるように、より深くクエリを実行するためにできることはありますか?