2010-06-25 38 views
1

我正在學習WCF數據服務(無法升級到RIA),我認爲我會得到的一個主要好處是它會爲我保持關係並執行延遲加載...WCF數據服務母公司實體鏈接

實施例:

的雙向關係:

Order.Items --> OrderItems 
OrderItem.Order --> Order 

說我已經到訂單的參考。然後我通過調用BeginLoadProperty(order, "OrderItems")填充它的項目。從那以後,我想到的是,以下將是真實的:

order.OrderItems[0].Order == order; 

可惜的是order.OrderItems[0].Order是空...

是此方案的支持?它會爲你處理WCF數據服務嗎?或者你是否留下了自定義實現?

我使用實體框架作爲基礎數據服務。

謝謝!

回答

0

由於幾個原因,WCF Data Services不會執行延遲加載。其一是大多數用戶希望完全控制何時發出Web請求(因爲它可能非常昂貴),其次有時候技術上不可行。例如,在Silverlight中,所有的HTTP請求只能通過異步API完成,因爲訪問屬性是同步操作,所以懶惰加載不能真正實現。 至於你的問題:WCF數據服務客戶端不知道雙向關係。它認爲它是兩個不同的關係。所以它無法修復你的鏈接。 爲此,您可以將雙向關係知識構建到您的客戶端實體中(例如,您的訂單屬性可以在添加項目時修復反向鏈接)。 另一種可能的解決方案是使用更復雜的查詢,使用$ expand查詢選項在同一請求中加載父實體。不幸的是LoadProperty/BeginLoadProperty API不支持以這種方式擴展查詢,你將不得不自己構造查詢。 所以要回答你最後一個問題,你只剩下你的自定義實現。 WCF - ADO.NET實體數據服務中的

0

。您可以使用.Expand()包含相關屬性

var orderItems = dataServiceContext.OrderItems 
       .Expand("Order/Customer, Product") 
       .Where(oi => oi.Order.Status == 1) 
       .ToList(); 

樣本。 客戶 - >訂單 - >訂購項目< - 產品