我有ProductFamily(父)和下屬列表(SaleItem)之間的父/子關係。我在本地運行Ravendb服務器,並將服務器作爲控制檯應用程序啓動。當我查詢Family數據時,我試圖在會話中包含SaleItems列表以避免額外訪問服務器。然而,在控制檯上,我會看到後續調用爲每個家庭加載單獨的saleitem列表,當我逐步通過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文檔中,因此在這種情況下不是真正的選擇。
RavenDB的版本,你運行,並使用客戶機/服務器模式,或嵌入式? –