Удаления в структуре "многие ко многим"
Я просто хочу проверить очень быстро. Скажем, у меня есть две сущности в модели данных: каталог и продукт. Они имеют отношения "многие ко многим" друг с другом, и оба требуются (каталог должен иметь как минимум один продукт, а все продукты должны принадлежать как минимум одному каталогу). Так что, если я должен был удалить Продукт, его удаление, конечно, должно быть Нулевым.
Но какой должна быть политика удаления для каталога? Если Каталог удален, не все его Продукты обязательно принадлежат ему. Товар может принадлежать более чем одному каталогу. Так что я определенно не должен использовать Cascade. Однако достаточно ли Nullify? Что если я получу висящие товары, которые не входят в каталог? Что встроено в Core Data, чтобы решить эту проблему с помощью схем "многие ко многим"? Мне нужно изменить мою схему?
3 ответа
Достаточно обнулить, и многие-многие звучат правильно. Тем не менее, конкретное ограничение, которое вы хотите (удаление детей-сирот), не может быть непосредственно применено к основным данным, так что вы можете сделать небольшую очистку самостоятельно.
В частности, реализовать willSave
в ваших классах сущностей, и каждый тест сущности: я не удален; и нет ли у меня связанных (товаров / каталогов)? Если так, удалите себя. (не удаленный тест важен, чтобы избежать бесконечного цикла willSave
с.)
Это откладывает удаление потерянных каталогов или продуктов до экономии времени. Это, вероятно, не проблема.
Я реализовал ответ rgeorge и подумал, что точный код может быть полезен другим людям:
- (void)willSave
{
[super willSave];
if (self.isDeleted)
return;
if (self.products.count == 0)
[self.managedObjectContext deleteObject:self];
}
Быстрый перевод Энди и Джозефа
override func willSave() {
super.willSave()
if self.deleted {
return
}
if self.products.count == 0 {
self.managedObjectContext?.deleteObject(self)
}
}