2012-05-24 70 views
2

我有ProductFamily(父)和下屬列表(SaleItem)之間的父/子關係。我在本地運行Ravendb服務器,並將服務器作爲控制檯應用程序啓動。當我查詢Family數據時,我試圖在會話中包含SaleItems列表以避免額外訪問服務器。然而,在控制檯上,我會看到後續調用爲每個家庭加載單獨的s​​aleitem列表,當我逐步通過foreach循環時。我認爲我做了一些不正確的事情,對於它可能是什麼感到困惑。我在使用RavenDB的第2天,所以任何手持讚賞。RavenDB包括仍然往返加載包含的數據

類:

public class Family 
    { 
     public string Id { get { return string.Format(@"Families/{0}", this.FamilyID); } } 
     public int FamilyID { get; set; } 
     public string FamilyNumber { get; set; } 
     public string Description { get; set; } 
     public string[] SaleitemIds { get; set; } 
     public override string ToString() 
     { 
      return string.Format("Number:{0} - {1}", FamilyNumber, Description); 
     } 
     [JsonIgnore] 
     public List<SaleItem> SaleItems { get; set; } 
    } 
    public class SaleItem 
    { 
     public string Id { get { return string.Format(@"SaleItems/{0}", this.SaleItemID); } } 
     public int SaleItemID { get; set; } 
     public string Description { get; set; } 
     public override string ToString() 
     { 
      return string.Format("Number:{0} - {1}", SaleItemID.ToString(), Description); 
     } 
    } 

,代碼:

List<SearchTerm> searchterms = new List<SearchTerm>(){ new SearchTerm(){term="1009110922"} 
      ,new SearchTerm(){term="1009112439"} 
      ,new SearchTerm(){term="1009122680"} 
      ,new SearchTerm(){term="1009124177"} 
      ,new SearchTerm(){term="1009133928"} 
      ,new SearchTerm(){term="1009135435"} 
      ,new SearchTerm(){term="1009148000"}}; 
     using (IDocumentSession session = documentStore.OpenSession()) 
     { 
      var results = session.Query<Family>().Customize(o => o.Include<SaleItem>(s => s.Id)).Where(x => x.FamilyNumber.In(searchterms.Select(t => t.term).ToList())); 

      foreach (Family fam in results) 
      { 
       Console.WriteLine(fam.ToString()); 

       fam.SaleItems = session.Load<SaleItem>(fam.SaleitemIds).ToList(); 
       foreach (SaleItem si in fam.SaleItems) 
       { 
        Console.WriteLine("  " + si.ToString()); 
       } 
      } 
     } 

當我通過我看到來電來獲取上線saleitems列表中的代碼步驟:

fam.SaleItems = session.Load<SaleItem>(fam.SaleitemIds).ToList(); 

我相信我已經實施了一些不正確的事情,但我對這個平臺足夠新以接受我可以簡單地誤解了行爲會是什麼。肯定有些情況下,我不希望將Saleitem文檔嵌入到Family文檔中,因此在這種情況下不是真正的選擇。

+0

RavenDB的版本,你運行,並使用客戶機/服務器模式,或嵌入式? –

回答

2

Doug_w, 看看你是包括哪些:

o.Include<SaleItem>(s => s.Id) 

你可能希望它是:

o.Include<SaleItem>(s => s.SaleitemIds) 
+0

Ayende,我實際上不得不使用以下內容:Customize(x => x.Include (t => t.SaleitemIds)),但這使我走上了正確的軌道。 –