Использование клиента служб данных WCF для хранилища таблиц Azure - хранение графиков объектов - PullRequest
1 голос
/ 07 января 2011

Я работаю с хранилищем таблиц Azure с помощью API .NET (TableServiceContext, Служба данных WCF и т. Д.). У меня есть простой график объектов, которые я хочу сохранить в хранилище таблиц. В классе контекста службы у меня есть следующий код.

_TableClient.CreateTableIfNotExist("AggRootTable");
this.AddObject("AggRoots", model);
foreach (var related in model.RelatedObjects)
{
    this.AddRelatedObject(model, "RelatedCollection", related);
}
this.SaveChanges();

Я использовал этот стиль кода в службах данных WCF через EF и SQL Server, но он не работает с таблицами Azure. Я не ожидал бы этого, поскольку в Azure нет реальных связей между таблицами. Однако методы есть. Кто-нибудь знает, как использовать AddRelatedObject, AddLink и т. Д. В контексте таблиц Azure? Или можете предложить подходы к хранению графов объектов в целом? Я не смог найти никаких документов, и Google не помог.

Спасибо, Erick

Ответы [ 2 ]

1 голос
/ 07 января 2011

Служба хранения таблиц, как правило, не подходит для хранения целых графов объектов, поскольку для каждой строки / объекта существует ограничение размера (1 МБ, IIRC).Очевидно, если вы знаете, что ваши графы объектов никогда не будут большими, вам может быть все равно ...

Хорошей альтернативой часто является хранение сериализованного графа в хранилище BLOB-объектов .Однако у вас должна быть стратегия для управления версиями.

1 голос
/ 07 января 2011

Вы не можете. ATS не поддерживает отношения. Из-за этого доступно много нерабочих методов, использующих API служб данных.

Однако вы можете сохранить полное дерево объектов в одной таблице. Не уверен, что это будет работать для вашего дизайна / архитектуры

также плохая идея продолжать вызывать CreateIfNotExists перед каждой операцией записи. Во-первых, вы доплачиваете за транзакции, совершаемые в оба конца, во-вторых, вызов не является мгновенным и замедляет ваши записи. просто подготовьте таблицы перед развертыванием или началом ролей.

...