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

将WCF数据服务客户端用于Azure表存储-存储对象的图形,azure,wcf-data-services,Azure,Wcf Data Services,我正在使用.NETAPI(TableServiceContext、WCF数据服务等)使用Azure表存储。我有一个简单的对象图,我想保存到表存储。在服务上下文类中,我有以下代码 _TableClient.CreateTableIfNotExist("AggRootTable"); this.AddObject("AggRoots", model); foreach (var related in model.RelatedObjects) { this.AddRelatedObject(

我正在使用.NETAPI(TableServiceContext、WCF数据服务等)使用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等吗?或者,您可以提出存储一般对象图的方法吗?我找不到任何文档,谷歌也帮不上忙

谢谢,
埃里克,你不能。ATS不支持关系。由于它使用数据服务API,所以有许多非工作方法可用

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

此外,在每次写操作之前继续调用CreateIfNotExists也是个坏主意。首先,您需要为往返过程中发生的事务支付额外费用,其次,呼叫不是即时的,会降低写入速度。
只需在部署之前或角色启动期间预创建表。

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


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

谢谢。我正在考虑这种方法。尺寸限制可能是个问题,但我必须解决这个问题。谢谢。看起来ATS客户端API是在自己的程序集中。太糟糕了,他们不能将API限制在支持的功能上。这将使使用它更容易。