J'ai vu cette question postée une fois, mais elle n'a jamais été résolue - et ce n'était pas très clair par l'affiche originale, alors j'essaye de nouveau avec un peu plus de clarté.RavenDB - Sous-entité Inclut
Compte tenu de la structure moquée suivante ...
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; }
}
Cela signifie que Sub_Entity est jamais dénormaliser, de sorte que ses Ids connexes n'existent pas sur l'objet JSON réelle, donc je me retrouve avec un objet comme celui-ci.
======= "conteneurs/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"
]
}
Maintenant, je veux vraiment optimiser la façon dont je tire tout cela de la base de données. Donc, je commence par inclure les sub_entities dans le conteneur initial.
je l'ai fait comme ceci:
var container = DocumentSession
.Include("Entities,Id")
.Include("Entities,Sub_Entities")
.Load<Container>("containers/1");
J'ai aussi accompli avec les éléments suivants à l'aide de prédicats.
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");
Cela me obtient la première série de sub_entities dans une demande, mais est-ce que je peux faire pour interroger plus profondément pour vous assurer peuvent être inclus les sub_entities imbriquées dans la même demande?
Ceci a déjà été répondu dans la liste de diffusion –