2011-07-05 82 views
0

我的應用程序的管理員可以爲用戶配置文件創建額外的屬性。所以UserA可以有1個手機號碼,而UserB可以有5個。或者UserA可以有一個Creditcard號碼,而UserB沒有。忽略空屬性Azure表存儲

我想使這個工作與Azure表存儲。我正在製作通用實體並將它們插入到表格存儲中。

我知道每個實體/行只能填充255個屬性(分區鍵,行鍵,時間戳和你自己的屬性)。在我的情況下,有很高的機會會有更多的列,但有一個非常小的機會1位用戶將實際使用255個屬性。

現在問題是,當用戶閱讀他的實體時,他不使用的所有其他屬性將是'm:null="true'

正如你所看到的,他仍然需要額外的財產,他不需要。 我當然可以忽略他們在我的ReadingEntity事件,但它仍然是正確的?想象一下,你想得到100個用戶的配置文件,你有500列。在那個xml文件的網絡流量中會有很多無用的數據。

有沒有什麼辦法可以忽略這些null並且根本不發送它們?而不是將它們發回並將列標記爲空?

enter image description here

+0

也許你想給分成兩個表?一個用於主人(即人)記錄,另一個用於詳細信息(電話號碼,地址等)。除非在查詢人員列表時(很可能不是),您總是需要所有的細節,否則會產生不必要的開銷(和成本)。 –

回答

3

您是否使用開發存儲?請務必在 真實雲存儲中嘗試此操作... dev存儲器會保存實際的架構,並且可能會將 從其他實體的屬性應用到您嘗試讀取的實體。 - 在17:28

smarx 7月5日這是解決

2

當您保存一個實體,你節約了這些額外的屬性(與空值)呢?就雲存儲而言,如果您在保存實體時未提供屬性,則在獲取實體時不會返回該屬性。然而,使用開發存儲是另一回事。在那裏如果你已經保存了一個有3個自定義屬性的實體和另一個有5個自定義屬性的實體。當您獲取實體時,您將獲得所有屬性。

+0

我沒有像我說的那樣使用普通實體。我正在使用簡單/泛型類型。 請參閱: http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/f57cb566-cc7a-4b31-b1ab-47b6d16604af/ 它允許我填寫帶有Attributes的字典,它是類型。所以不,我沒有填寫其他屬性,當我保存我的實體:) –

+1

你是否使用開發存儲?確保對真實的雲存儲進行嘗試...... dev存儲保存了一個實際的模式,並可能將其他實體的屬性應用於您正在嘗試讀取的屬性。 – smarx

+0

謝謝smarx!我只是針對真正的雲存儲進行測試,並且不會返回空值。當我使用開發存儲時,我只需在閱讀實體中添加額外支票。 在使用開發存儲時,我可能會遇到任何其他已知的「困難」嗎? –

1

您將看到空的東西返回給您的唯一方法是,如果你保存它們開始。我會再次檢查通用實體持久性代碼或通用實體本身。它必須是空值被髮送用於保存的情況。由於表存儲中沒有模式,因此它不可能爲不知道的字段發送值。 Fiddler會在保存時向你顯示。