我正在查看以下示例代碼以包含參考文檔並避免往返。Raven如何知道要包含哪些集合?
var order = session.Query<Order>()
.Customize(x => x.Include<Order>(o=>o.CustomerId)) // Load also the costumer
.First();
var customer = session.Load<Customer>(order.CustomerId);
我的問題是如何烏鴉知道這意味着o=>o.CustomerId
文件Customer
/收集?查詢中提供的實體Customer
從未在任何時間得到Order
實體。然而,烏鴉聲稱,第二個查詢得到Customer
可以完成對緩存,沒有任何網絡旅行。
如果是通過命名約定,這似乎是一個非常差/脆弱/脆弱的約定,當我需要包含多個文檔時會發生什麼?
例如,一輛汽車是以2個名字購買的,所以我想要鏈接回2個客戶,主要和次要客戶/司機。它們都存儲在Customer集合中。
var sale = session.Query<Sale>()
.Customize(x => x.Include<Sale>(o=>o.PrimaryCustomerId).Include<Sale>(o=>o.SecondaryCustomerId)) // Load also the costumer
.First();
var primaryCustomer = session.Load<Customer>(order.PrimaryCustomerId);
var secondaryCustomer = session.Load<Customer>(order.SecondaryCustomerId);
如何在1次網絡旅程中完成上述操作? Raven如何知道這個o=>o.PrimaryCustomerId
和o=>o.SecondaryCustomerId
是對同一張表Customer
的引用,因爲顯然屬性名稱和集合名稱不對齊?
馬特,這是如何與Guid ID一起工作的?你顯示的例子是帶順序ID的字符串。 Guid沒有實體名稱,那麼Raven如何解析正確的集合進行查詢?或者它會根據Guid查詢所有內容? – Alwyn
如果您爲'Id'使用字符串,則可以完全控制文檔密鑰。如果使用整數或Guid,則使用「FindFullDocumentKeyFromNonStringIdentifier」約定爲您創建字符串文檔關鍵字,默認情況下該關鍵字預先指定了該類型的複數形式和斜槓。你可以閱讀更多關於非字符串標識符[這裏](http://ravendb.net/docs/2.5/client-api/basic-operations/loading-editing-existing-document#non-string-identifier)。 –
換句話說,「文檔鍵」與「Id」相關*,但不一定完全相同。你不會有一個只有「123」的文檔鍵。它必須是「客戶/ 123」。對於指導也是一樣。 –