我想用DataServiceQuery查詢數據庫中的單個實體。 我想加載的實體與我想要加載的其他實體的圖形有關係。 MSDN描述here和here我可以使用任一化DataServiceQuery <TElement> .Expand或DataServiceContext.LoadProperty加載我提到的實體。如何加載與WCF數據服務的二級實體關係?
也能正常工作對我實體的第一個學位的關係,但我有關係的問題裝載關係。
很顯然,我可以打電話LoadProperty所有二度關係,並遍歷所有二度集合,但我希望我能渴望負載在單個查詢整個關係圖。那可能嗎?
編輯
實際加載的二度關係不是很明顯畢竟。 以下代碼失敗(改變爲清楚起見域模型):
var context = DataServiceReference.DataServiceContextFactory.Create();
var customer = (from c in context.Customers.Expand("Orders")
where c.CustomerId.Equals(customerId)
select c).First();
foreach (var order in customer.Orders)
{
context.LoadProperty(order, "Products");
上面的最後一行拋出InvalidOperationException異常:「上下文不是目前跟蹤實體」。 我使用自我跟蹤實體。這個錯誤可能與STE有關嗎?
我該如何加載二度關係?
解編輯
事實證明化DataServiceQuery <TElement> .Expand使用不同的路徑語法相比的ObjectQuery <Ť> .INCLUDE。前者使用斜線作爲路徑分隔符,後者使用點。任何人都可以解釋爲什麼語法不一致,我可以在哪裏找到Expand路徑語法的文檔?
是的,上下文工廠只是一個簡單的工廠類,它使用正確的URL創建上下文。我的問題在於擴展路徑使用「/」我習慣於包含哪些使用「。」在路徑中。這種不一致的路徑表示法的解釋是什麼? – Holstebroe 2010-10-13 11:29:50
我試圖添加行context.MergeOption = MergeOption.OverwriteChanges;在我創建上下文之前和加載實體之前,但它的LoadProperty仍然失敗,並且context.GetEntityDescriptor(myEntityInstance)返回null。如何正確啓用跟蹤? – Holstebroe 2010-10-13 11:49:13
Expand中的語法是從$ expand的URL語法中「繼承」的。在URL中,/用於分隔導航,因爲這是在URL中導航的自然方式。 – 2010-10-13 18:39:00