使用Azure表存储的WCF数据服务客户端 - 存储对象的图形

时间:2011-01-07 03:21:28

标签: azure wcf-data-services

我正在使用.NET API(TableServiceContext,WCF数据服务等)处理Azure Table存储。我有一个简单的对象图表,我想保存到表存储区。在服务上下文类中,我有以下代码。

_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也没有帮助。

谢谢, 埃里克

2 个答案:

答案 0 :(得分:1)

你做不到。 ATS不支持关系。由于它使用数据服务API,因此有许多非工作方法可用。

但是,您可以将完整对象树存储在单个表中。不确定这是否适用于您的设计/架构

另外,在每次写入操作之前继续调用CreateIfNotExists是个坏主意。首先,您为往返交易支付额外费用,其次是通话不是即时的,并且会减慢您的写入速度。 只需在部署之前或角色启动期间预先创建表。

答案 1 :(得分:1)

表存储服务通常不是存储整个对象图的好地方,因为每个行/实体的大小限制(1 MB,IIRC)。显然,如果你知道你的对象图永远不会很大,你可能不在乎......

一个很好的选择通常是在Blob存储中存储序列化图形。但是,您必须有一个如何处理版本控制的策略。