Используя Windows Azure Table Storage
(WATS) и пытаясь обновить приложение для использования Azure. Я прочитал много статей, и я не уверен в том, что для этого лучше всего подходит метод «родитель-ребенок» в модели, ссылающейся на себя.
то есть одно родительское сообщение может иметь много дочерних вложенных сообщений. В модели БД это будет таблица со ссылками на себя.
Как мне лучше структурировать это для WATS
, чтобы при выполнении запроса «Дайте мне 10 родительских записей» он также возвращал все дочерние сообщения, принадлежащие родительскому ...
Сущность сообщения / вложенного сообщения, как показано ниже. Я попытался определить PK и RK, как показано ниже:
public class TextCacheEntity : AzureTableEntity // custom table inherits AzureTableEntity
{
public override void GenerateKeys()
{
PartitionKey = string.Format("{0}_{1}_{2}", MessageType, AccountId.PadThis(), ParentMessageId );
RowKey = string.Format("{0}_{1}", DateOfMessage.Ticks.ReverseTicks(), MessageId);
}
public string MessageType { get; set; }
public int AccountId { get; set; }
public DateTime DateOfMessage { get; set; }
public string MessageId { get; set; }
public string ParentMessageId { get; set; }
// other properties...
}
Я подумал о реализации, чтобы дочерние сообщения сохраняли parentMessagesId, а родительский parentMessageId был бы пустым.
Шаблон будет тогда
Получить родительские сообщения
.Where(o => o.ParititionKey == "Parent_000000000000001_").Take(10)
Получите дочерние сообщения. Итерируйте по всем родительским сообщениям и используйте параллель для цикла
.Where(o => o.ParititionKey == "Child_000000000000001_" + parentMessageId)
Но проблема в том, что это приведет к 11 запросам!