Pregunta

tengo un modelo de datos básicos que cuenta con tres entidades: A, B, y C. A tiene una relación uno-a-muchos con B, y B tiene una relación de muchos a muchos con C. La regla de eliminación de A -> B es "cascada", y B -> A es "no acción". La regla de eliminación para B -> C es "No Acción", y C -.> B es "Denegar"

Estoy teniendo problemas para realizar una eliminación en la entidad A. Lo que quiero que suceda es la siguiente:

  1. I eliminar una instancia de A (usando deleteObject:)
  2. Los propaga eliminación en cualquier B está asociada con A (debido a la "cascada" regla de supresión)
  3. Todos los B está asociada con A se eliminan
  4. Cualquier relaciones pertenecientes a C de cuyos B asociado del fueron eliminados, están también elimina

Esto puede ser un poco confuso, así que permítanme parafrasear: Cuando se elimina una A, B de borrar todo asociado. Y cualesquiera de C que hacen referencia obligada de los que B no hacen referencia a ellos nunca más.

En mis pruebas, no estoy viendo la obra regla de supresión "en cascada" para mí en absoluto. Al eliminar una A, invoco processPendingChanges inmediatamente después (sólo para asegurarse de la eliminación se ha hecho). Luego comparo el número de A y B. que estaban en el NSManagedObjectContext antes de la eliminación, y después de ella. La instancia de A ha sido eliminado correctamente, (el número del total de A de ahora es uno menos que antes de la eliminación). Sin embargo, el número de B sigue siendo el mismo. Por lo tanto, parece que la norma de supresión "en cascada" no se está cumpliendo.

Yo sé que puedo ir manualmente a través de la A -> B relación, y borrar manualmente cada B. Sin embargo, parece que esto es algo Core Data proporciona de forma gratuita, por lo que no quiero hacer eso a menos de Datos Básicos es insuficiente. Cualquier información sobre el uso de "cascada" normas de supresión es bienvenido.

¿Fue útil?

Solución

Ciertamente no soy experto datos básicos, pero la lectura de la documentación sobre las distintas opciones de regla de supresión , me parece que desea que el B -> C relación sea Nulidad , en lugar de No Acción . Tal vez los B no van a desaparecer porque el Cs siguen manteniendo las referencias a ellos?

Otros consejos

Basado en el

  

Cualquier relaciones pertenecientes a C de cuya asociado B de se suprimieron,   también se eliminan   Sugiere que el B-C también debe tener Cascade.

Además, si se elimina B, luego C de debe también ser eliminado. Una vez más Cascade.

  • Nulidad se utiliza a menudo como una regla de eliminación inversa *

ie. B en relación a A es Nulidad. C relación a B es Nulllify. De tal manera que cuando se elimina C, no se elimina B. Y cuando se elimina B; Una no se elimina.

Como en este dibujo ganador.

A --- B >> Cascade  <---- Anule

B --- >> C Cascade  <---- Anule

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top