2012-07-22 48 views
0

我正在使用一個應用程序,其中從TableServiceObject派生的.NET類型被保存到Azure表存儲(稱爲「Person」)具有另一個實體(「events」)的集合。當然,集合屬性不會保存到Azure表存儲。如何向保存在Azure表存儲中的實體添加新屬性?

我想要做的是在Person存儲實體上具有可變數量的屬性,並在必要時創建新屬性。例如,如果Person1之前參加了1個事件,並且出席了一個新事件,那麼我的代碼需要爲Person1實體創建一個「Event2」屬性,並將指針保存到該屬性中的Event2的存儲位置。 Person1然後有2個「事件」屬性,但該表中的另一個實體可能有10個(event1,event2,event3 ... event10)。

因爲Person類直接映射到Azure表,它會自動爲類中的每個公共屬性創建一個屬性,所以我無法找到一種方法將Event2屬性動態添加到此保存的實體,而無需創建永久對我的班級財產,我不想這樣做。有沒有辦法?

想要存儲此「鋸齒狀」屬性集的目的是爲了讓我能夠獲取所有人蔘加的活動,而無需對存儲事件的分區執行完整掃描。

謝謝!

更新:Smarx是正確的 - 一旦我知道要尋找什麼,很容易找到如何使用ReadingEntity和WritingEntity事件在Azure表服務這樣的描述: http://convective.wordpress.com/2009/12/30/entities-in-azure-tables/

回答

1

我假設你使用的是.NET,因爲你提到了映射到表中的實體的類。表存儲本身沒有模式,所以這是一個完全沒有問題的問題。

在沒有模式的情況下使用WCF數據服務客戶端庫(Microsoft.WindowsAzure.Storage下的內容)有點棘手。搜索與表格存儲相關的ReadingEntityWritingEntity,並且您可能會找到您需要的內容。實質上,您需要鉤住這些事件並解析(或注入)所需的額外屬性。人們通常通過創建一個字典屬性來處理這些「額外」屬性,然後在這些事件觸發時進行讀寫。

您也可以查看http://www.lucifure.com/,這是我沒有經驗的替代客戶端庫。我相信它也解決了這個限制:「通過字典動態存儲,因此您不必將每個表屬性映射到類成員。」

+0

謝謝Smarx!聽起來很有希望。你是對的 - 我在使用.NET。我會檢查你說的並試一試。再次感謝! – 2012-07-25 12:49:59

+0

這就是答案。謝謝Smarx!我沒有弄清楚如何添加字典 - 但是我發佈的鏈接顯示瞭如何篡改XML來添加屬性。看起來好像在實際的.NET實體中添加任何東西都是很困難的,因爲一旦我修改了.NET實體,就沒有任何方法可以告訴它繼續保存操作... – 2012-07-26 16:12:11

+1

太棒了!尼爾的帖子正是我想到的。我對字典的看法是,人們經常在其.NET對象(如「ExtraProperties」)中包含字典屬性,在「ReadingEntity」和「WritingEntity」中包含字典屬性,它們將值放入該字典中或使用字典分別修改XML。這只是一個方便的地方,讓您可以通過代碼訪問這些屬性。 – smarx 2012-07-26 22:58:38

相關問題