2011-01-07 65 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