2011-01-07 85 views
1

我正在使用.NET API(TableServiceContext,WCF數據服務等)使用Azure表存儲。我有一個簡單的想要保存到表格存儲區的對象圖。在服務上下文類中,我有以下代碼。使用WCF Data Services客戶端用於Azure表存儲 - 存儲對象圖

_TableClient.CreateTableIfNotExist("AggRootTable"); 
this.AddObject("AggRoots", model); 
foreach (var related in model.RelatedObjects) 
{ 
    this.AddRelatedObject(model, "RelatedCollection", related); 
} 
this.SaveChanges(); 

我已經通過EF和SQL Server在WCF數據服務中使用了這種風格的代碼,但它不適用於Azure表。我不會期望它,因爲Azure中的表之間並不存在真正的關係。但是,方法在那裏。有誰知道如何在Azure表格的上下文中使用AddRelatedObject,AddLink等?或者可以建議一般存儲對象圖的方法?我一直無法找到任何文檔,Google也沒有幫助。

感謝, 埃裏克

回答

1

你不能。 ATS不支持關係。由於使用數據服務API,因此有許多非工作方法可用。

但是,您可以做的是將完整的對象樹存儲在單個表中。不知道這是否適用於您的設計/體系結構

此外,在每次寫入操作之前繼續調用CreateIfNotExists是一個壞主意。首先,您爲往返發生的交易支付額外費用,第二次呼叫不是即時的,並會減慢您的寫入速度。 只是在部署之前或角色啓動期間預先創建表。

+0

謝謝。它看起來像ATS客戶端API在它自己的程序集中。太糟糕了,他們不能將API限制爲支持的功能。它會使它更容易使用。 – 2011-01-08 01:50:15

1

表存儲服務通常不是存儲整個對象圖的好地方,因爲每個行/實體都有一個大小限制(1 MB,IIRC)。很明顯,如果你知道你的對象圖將永遠不會太大,你可能不在意...

一個很好的選擇是經常在Blob存儲中存儲一個序列化圖。但是,您必須有一個如何處理版本控制的策略。

+0

謝謝。我正在考慮這種方法。大小限制可能是一個問題,但我必須找出一個問題。 – 2011-01-08 01:49:19