2013-01-16 64 views
1

我曾經看過這個問題曾經發布過一次,但它從來沒有得到解決 - 原來的海報並不是很清楚,所以我再次嘗試了一次更清晰。RavenDB - 子實體包括

考慮下面的嘲笑結構...

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從未規格化,因此實際JSON對象上不存在與其相關的ID,所以我結束了這樣的對象。

======= 「容器/ 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可以包含在相同的請求?

+0

這已經在郵件列表中得到解答 –

回答

1

這是Google羣組郵件列表中特定的thread

Ayende也在那篇文章中提到了他的一個blog posts,他涵蓋了這個概念。