Azure Table и наследование сущностей - PullRequest
2 голосов
/ 10 мая 2011

Допустим, я создаю базу данных для ветеринаров и животных, о которых они заботятся.У меня есть следующие сущности:

класс Animal: TableServiceEntity
класс Dog: Animal
class Cat: Animal

Dog и Cat каждый имеет уникальные свойства.И у меня есть таблица Azure с именем Vets, в которой ключ разделения - vet.Guid, а ключ строки - «Dog_» + dog.Guid или «Cat_» + cat.Guid.Если бы мне нужно было получить все с помощью AsTableServiceQuery (), могу ли я затем привести сущность животного в Dog или Cat с неизменными этими уникальными свойствами?

В более широком смысле, что каждый принимает за компромиссы в подобных ситуациях?Между хранением Dog и Cat в одной таблице для эффективного запроса, но дополнительным шагом на бизнес-уровне и наличием отдельных таблиц с дополнительным запросом, но менее грязным кодом?

1 Ответ

4 голосов
/ 10 мая 2011

Следует помнить, что данные в таблицах Windows Azure возвращаются вам в формате AtomPub. Итак, у вас есть процесс сериализации, который отображает XML в общедоступные свойства вашего DTO. Вы можете указать, что делать в случае дополнительных или отсутствующих свойств (рассматривать как ошибку или игнорировать). Кроме того, вы можете переопределить процесс сериализации, перехватывая событие ReadingEntity.

Итак, в контексте вашего вопроса вы должны иметь в виду, что если вы хотите сериализовать в Animal, вы не сможете привести к Dog, потому что вам нужно указать тип сериализации во время выполнения. Э.Г.

ctx.CreateQuery<TypeToSerialize>().Where(s => s.Property == blah);

Если вы выберете TypeToSerialize в качестве Собаки, вы всегда можете понизить до Animal, но это может быть не так полезно. Но если вы выбрали TypeToSerialize в качестве Animal, то информация, имеющаяся у Dog, уже будет отсутствовать, поскольку она нигде не будет сериализована и будет эффективно игнорироваться.

Причина, по которой я упоминаю ReadingEvent, заключается в том, что вы можете сами выполнить сериализацию, и тогда все ставки отключены. Вы можете проверить возвращаемые свойства и решить, к какому типу вы хотите сериализоваться, или вы можете сохранить дополнительные атрибуты в пакете свойств и т. Д.

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...