0

Иногда вы создаете сущность, которая должна существовать в другом объекте. Однако, если он превратится в сироту, у него больше не будет причин существовать в хранилище данных.Как обеспечить, чтобы моя сущность никогда не была сиротой?

What happens to child datastore objects after deleting the ancestor?

Согласно приведенной выше ссылке,

  1. "дочерних объектов не удаляются, когда предок удален"
  2. «child_entity.key.parent(). Получим () вернет None. "

Если удалить предка, ребенок не будет иметь родителей, что делает его сиротой.

Это проблема, так как нет никаких оснований для того, чтобы она оставалась в хранилище.

Есть ли способ гарантировать, что это никогда не происходит в базе данных?

Возможные решения я могу думать о том, являются:

  1. Регулярно запускать макросы для удаления сиротам
  2. Попробуйте очистить код/​​отсеять ошибки, которые могут привести к моему ребенку превратиться в сирота

Однако я надеюсь на более программно правильное решение, такое как атрибут или свойство, которые могут быть установлены, чтобы гарантировать, что родительский (ключ) никогда не укажет сущность, которая не существует. (aka автоматически удаляет сущность при удалении предков)

Есть ли? Если да, то что это? Если нет, почему бы и нет?

+0

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

+0

Я понимаю, что нет ошибки, когда сущность становится сиротой. Однако проблема заключается в том, что иногда у вас нет причин держать ее в хранилище данных. –

ответ

2

Детское сущность может никогда не становится корневым объектом, так как он по-прежнему имеет один и тот же родительский ключ, даже если родитель был удален (или никогда не существовал).

Родительский ключ объекта не может быть изменен во время жизни объекта, поскольку родительский ключ встроен в ключ объекта.

Что касается автоматического удаления потомков объекта при удалении сущности - такого способа нет. Но это может быть достигнуто программно, см. How to delete an entity including all children.

+0

Хорошо, спасибо за информацию! Я изменил свой вопрос для ясности. –