2012-10-05 90 views
1

我有一個名爲「Comment」的類型,我將其保存到Azure表存儲。由於評論可以是關於任何其他類型的,所以我創建了一個所有這些類型實現的接口,然後在評論中放置一個ICommentable類型的屬性。所以Comment有一個名爲About的ICommentable類型的屬性。Azure表存儲拒絕具有其值爲接口的屬性的實體

當我嘗試將評論保存到Azure表存儲時,如果Comment.About屬性具有值,則會收到無用的無效輸入錯誤。但是,如果Comment.About沒有任何價值,我沒有問題。爲什麼會這樣?

Comment.About不是唯一屬性是引用類型。例如,Comment.From是一個引用類型,但Comment.About是作爲接口的類型的唯一屬性。

失敗:

var comment = new Comment(); 
     comment.CommentText = "It fails!"; 
     comment.PartitionKey = "TEST"; 
     comment.RowKey = "TEST123"; 
     comment.About = sow1; 
     comment.From = person1; 

作品:

var comment = new Comment(); 
     comment.CommentText = "It works!"; 
     comment.PartitionKey = "TEST"; 
     comment.RowKey = "TEST123"; 
     //comment.About = sow1; 
     comment.From = person1; 

謝謝!

回答

2

Windows Azure表存儲只能存儲少數類型,其中沒有一個是您創建的ICommentable類型:http://msdn.microsoft.com/en-us/library/windowsazure/dd179338.aspx

+0

謝謝smarx - 這很有道理,而且我確實知道這一點。讓我感到困惑的是,任何引用類型都會自動忽略 - 那麼爲什麼錯誤呢?我沒有試圖保存這個屬性,但是我必須在保存之前去除額外的工作,因爲它會拋出錯誤。 –

+0

我沒有意識到引用類型被忽略。但是'string'不是引用類型嗎? – smarx

+0

Uuuhhh,你有我。我濫用術語引用類型 - 我的意思是引用另一個類的屬性。所以在上面的例子中,About和From屬性都是對另一個類型的引用。 From屬性始終是Person類型。但是Azure表服務忽略了這個屬性 - 沒有錯誤,但絕對沒有以任何方式保存。但是,來自ICommentable類型的屬性,如果它具有值,則會導致錯誤。 –

1

Azure表存儲客戶端不支持控制哪些屬性可持久的粒度方法。

您可能希望查看一下CodePlex上的我的開源項目,該項目允許細粒度控制哪些字段/屬性持久保存到表存儲以及如何序列化它們。 (http://lucifurestash.codeplex.com/

編輯:固定錯字+說明。

+0

謝謝,我會檢查出來。 –

相關問題