我正在使用.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也没有帮助。
谢谢, 埃里克
答案 0 :(得分:1)
你做不到。 ATS不支持关系。由于它使用数据服务API,因此有许多非工作方法可用。
但是,您可以将完整对象树存储在单个表中。不确定这是否适用于您的设计/架构
另外,在每次写入操作之前继续调用CreateIfNotExists是个坏主意。首先,您为往返交易支付额外费用,其次是通话不是即时的,并且会减慢您的写入速度。 只需在部署之前或角色启动期间预先创建表。
答案 1 :(得分:1)
表存储服务通常不是存储整个对象图的好地方,因为每个行/实体的大小限制(1 MB,IIRC)。显然,如果你知道你的对象图永远不会很大,你可能不在乎......
一个很好的选择通常是在Blob存储中存储序列化图形。但是,您必须有一个如何处理版本控制的策略。