У меня есть модель Core Data, которая имеет три объекта: A, B и C. A имеет отношение "один ко многим" с B, а B имеет отношение "многие ко многим" с C. Правило удаления для A → B - "Каскад", а B → A - "Нет действий". Правило удаления для B → C - "No Action", а C → B "Deny".
У меня возникают проблемы с удалением по объекту A. Я хочу, чтобы это произошло:
- Я удаляю экземпляр A (используя
deleteObject:
) - Удаление распространяется на любой B, связанный с A (из-за правила удаления "Каскад" )
- Все B, связанные с A, удаляются.
- Любые связи, принадлежащие C, связанные с B были удалены, также удаляются
Это может быть немного запутанным, так что позвольте мне перефразировать: когда A удаляется, удалите все связанные B. И любой C, который ссылается на эти B, больше не должен ссылаться на них.
В моем тестировании я не вижу, чтобы правило удаления Cascade для меня вообще. Когда я удаляю A, я вызываю processPendingChanges
сразу после этого (просто чтобы убедиться, что удаление выполнено). Затем я сравниваю число A и B, которые были в NSManagedObjectContext перед удалением, и после него. Экземпляр A был удален правильно (число A теперь меньше, чем до удаления). Однако число B остается неизменным. Таким образом, кажется, что правило удаления "Каскад" не соблюдается.
Я знаю, что могу вручную переходить через отношения A → B и вручную удалять каждый B. Однако похоже, что это то, что Core Data предоставляет бесплатно, поэтому я не хочу этого делать, если Core Data не будет недостаточно. Любая информация об использовании правил удаления "Каскад" приветствуется.