2011-11-10 29 views
2

我希望能够存储有使用这样的结构使在Azure Table中存储的子对象的对象:如何嵌入文档中Azure Table中存储

public class AzureTestDocument : TableServiceEntity 
{ 
    public AzureTestDocument(int counter) 
     : base("_default", counter.ToString()) 
    { 
     Counter = counter; 
     Child = new AzureTestChildDocument(counter); 
    } 

    public int Counter { get; set; } 
} 

public class AzureTestChildDocument 
{ 
    public AzureTestChildDocument(int counter) 
    { 
     Counter = counter; 
    } 

    public int Counter { get; set; } 
} 

保存父文档,如果我删除儿童文件正常工作。保存这样的结构会导致“请求输入之一无效”异常。做一些Google搜索就会发现这篇文章about supported types,这可能意味着您不能嵌入除支持短列表之外的任何类型。

请澄清,如果是这种情况或指向我可能缺少的东西。

回答

5

Azure表存储支持保存仅包含基本属性的实体。任何嵌套子对象需要单独保存:

可以将子对象序列化为字符串并将这些字符串保存为属性。

或者,您也可以保存这些子对象为各行Azure中的表

或者,如果你正在处理的文件,你可以保存在Azure的BLOB存储的对象。

+1

而不是序列化为一个字符串,您可以只存储字节作为支持字节数组。如果它将大于64k,那么将文档保存在blob存储中将是一条可行的路。 – knightpfhor

+0

对于字节数组已达成一致并且良好的捕获 – Igorek

+0

表格实体(包括所有属性)的最大大小为1 MB。但是Azure表也支持byte []数据类型,所以理论上可以在其中“嵌入”任何类型的文档。有关Azure Tables的更多信息:http://msdn.microsoft.com/en-us/library/windowsazure/dd179338.aspx – astaykov