2013-01-16 3 views
1

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?

+0

Ceci a déjà été répondu dans la liste de diffusion –

Répondre

1

Voici la thread sur la liste de diffusion de Google Groupes. Ayende mentionne également un de ses blog posts dans ce fil, où il couvre le concept.