Ich habe ein Kerndatenmodell mit drei Entitäten: A, B und C. A hat eine Eins-zu-viele-Beziehung mit B und B hat eine Viele-zu-Viele-Beziehung mit C. Die Löschregel für A -> B ist "Cascade" und B -> A ist "No Action". Die Löschregel für B -> C ist "No Action" und C -> B ist "Deny".Wie kann man verwaltete Objekte in Core Data ordnungsgemäß kaskadieren?
Ich habe Probleme beim Ausführen eines Löschens auf der A-Entität. Was ich will, geschehen ist folgende:
- ich eine Instanz von A (mit
deleteObject:
) - Die Lösch pflanzt sich in jedem B löschen mit A verbunden sind (aufgrund der „Cascade“ löschen Regel)
- alle B mit A verbunden sind
- Irgendwelche Beziehungen gelöscht C Zugehörigkeit, deren zugehörige B gelöscht wurden, werden entfernt, auch
das ist ein wenig verwirrend sein mag, so lassen Sie mich paraphrasieren: Wenn ein A dele ist ted, lösche alle zugehörigen B's. Und jedes C, das auf diese B verweist, darf sie nicht mehr referenzieren.
In meinen Tests sehe ich nicht, dass die Löschregel "Cascade" überhaupt für mich funktioniert. Wenn ich ein A lösche, rufe ich sofort danach processPendingChanges
auf (nur um sicherzustellen, dass der Löschvorgang durchgeführt wurde). Dann vergleiche ich die Anzahl von A und B, die vor dem Löschen im NSManagedObjectContext waren, und danach. Die Instanz von A wurde ordnungsgemäß gelöscht (die Anzahl der gesamten A ist jetzt um eins niedriger als vor dem Löschen). Die Anzahl der B bleibt jedoch gleich. Es scheint also, dass die Löschregel "Cascade" nicht eingehalten wird.
Ich weiß, dass ich manuell die A -> B-Beziehung durchlaufen kann, und jedes B manuell löschen. Es scheint jedoch, dass dies etwas ist, das Core Data kostenlos zur Verfügung stellt, also möchte ich das nicht ohne Core Data machen ist ungenügend. Alle Informationen bezüglich der Verwendung von "Cascade" Löschregeln sind willkommen.
Warum Sie nicht löschen möchten, die Cs, die auf B verweisen, die mit gelöschtem A verknüpft sind? – Eimantas