2013-02-01 31 views
1

正如我提到的in my last question,我通過Alex D. James的優秀三歲WCF數據服務定製提供者博客閱讀。當我進入關於相關數據的部分時,我們將所有數據都盲目地描述爲ResourceTypeKind.EntityTypeI looked up the documentation,對於使用ResourceTypeKind.ComplexType沒有定義或指導。什麼是ResourceTypeKind.ComplexType?

我認爲這是一個非基本類型,總是被包含在我的查詢中,但找不到任何證實這一點的東西。這將是用於EF的模型。我認爲這就是爲什麼這存在。

如果我的假設是正確的,那麼我是否像我做我的ResourceTypeKind.EntityTypes一樣定義我的ComplexTypes?我是否可以假設WCF數據服務ComplexTypes的規則與EF ComplexTypes相同?

[編輯]對WCF Data Services a.k.a. OData查詢有什麼影響?我是否期望使用.Expand(complex)a.k.a. $ expand?在使用LInQ和WCF數據服務客戶端的客戶端中,我應該創建一個匿名類型來獲取複雜類型嗎?客戶是否知道它們是ComplexType?

+0

是的。 EF和WCF數據服務中複雜類型的規則類似。將複雜類型看作結構類型(如實體),但沒有標識,因此不能像實體類型那樣直接查詢。對於例如您可以定義一個名爲「Address」的複雜類型,在一個實體中擁有這種複雜類型的屬性。希望這可以幫助。 – Pratik

+0

謝謝@Pratik,這證實了我的假設,但是對於在WCF Data Services a.k.a. OData中查詢有什麼影響?我是否期望使用.Expand(complex)a.k.a. $ expand?在使用LInQ和WCF數據服務客戶端的客戶端中,我應該創建一個匿名類型來獲取複雜類型嗎? –

回答

2

OData中的複雜類型與EF中的複雜類型非常相似。通過OData,它們被視爲原子「價值」類型。因此,響應始終包含整個值(即使它是嵌套的,在層次結構中包含多個複雜類型等)。

至於查詢支持,客戶端只有在請求單個值時才能解決複雜類型問題。 (假設Address是一個屬於Customer的類型是複雜類型的屬性)。例如〜/ Customers(1)/ Address/City是一個有效的查詢,它只返回Address複雜值的City屬性。

由於該值被視爲原子,因此$ expand不起作用(它將失敗,因爲它僅適用於導航屬性)。 $ select可以工作,但只能在整個複雜屬性上工作。所以我可以做〜/ Customers?$ select =地址,它會將所有客戶返還給我,但只有地址屬性。我不能做〜/ Customers?$ select =地址/城市 - 這是無效的。

以某種方式,您可以將複雜屬性視爲「始終展開」,但最好不要將它們視爲實體/導航,而應視爲單獨的東西。

相關問題