2013-05-20 27 views
3

如果我有一個由WCF數據服務公開的OData繼承層次結構,我如何將子類實體公開爲它自己的實體集?我應該使用什麼URI來訪問它?如何使用WCF和OData公開繼承的實體?

比方說,我有一個OData的網址如下:

http://myodataservice.svc

比方說,我有一個實體FOO是抽象的,這是FOO的一個子類的實體酒吧。

我想要做的是去一個網址http://myodataservice.svc/bar來訪問欄對象,但似乎這是不可能的。任何人都可以用一個簡單的例子指出我的意思,這樣我就可以看到它是如何工作的?

回答

4

每個實體實例只能屬於一個實體集合。因此,您可以擁有多個共享相同類型(或基本類型)的實體集,但它們的實體實例集不得重疊。 如果您需要一個包含基本類型的所有實體實例但仍希望僅訪問某個派生類型的實體實例的實體集,則可以使用類型轉換路徑段。

這需要的OData V3,但你可以做這樣的事情:

http://myodataservice.svc/baseentities/Namespace.DerivedType

此網址就像從baseentities實體集實體的實體集,但過濾,只有DerivedType實例。它也是強類型的(該URL的類型是DerivedType實例的集合)。因此,您可以像使用其他實體集URL一樣使用它,也就是說,您可以使用/進一步導航,或者可以附加任何查詢運算符,如$ filter,$ select等。

+1

我想我必須在這裏錯過一個竅門,我不斷收到404資源無法找到錯誤,查詢基礎實體工作正常,但;人們常常錯過一步嗎? –

+0

確保服務器支持OData V3(即如果您使用的是WCF數據服務,則必須啓用它,並且您需要擁有足夠新的二進制文件等)。如果您確定您的服務器支持OData V3,請發佈您嘗試訪問的URL和模型的相關部分(EDM)。 URL中的類型名稱必須是模型中的完全限定類型名稱。 –

+0

感謝Vitek,我已經發布這個作爲一個單獨的問題http://stackoverflow.com/questions/16790088/wcf-data-service-gives-404-when-making-odata-requests-for-derived-types –