Tengo un Core relación de Datos entre dos entidades, que es como este:

Entity A                        Entity B
aRelationship <-------------->> bRelationship

Con la regla de eliminación establece en cascada.

Tal vez tengo esta mal, pero yo pensaba que si la regla de eliminación de estas relaciones se establece en «Cascada», a continuación, cuando se hizo el siguiente…

[context deleteObject:EntityA];

…también sería eliminar todos los de la Entidad B está asociado a él. Sin embargo, cuando me conecto todos los de mi entidad B parece que me equivoco.

Podría alguien por favor, arrojar algo de luz sobre mi confusión?

Muchas gracias.

InformationsquelleAutor James Dunay | 2011-08-22

2 Comentarios

  1. 90

    Mientras que no es inmediatamente evidente en la gráfica del modelo de datos del editor de cada recipocal relación, es decir, cada

    <--> 

    …es, en realidad, dos por separado la relación de cada uno con su propia regla de eliminación. Eliminar reglas se activa cuando un objeto de la entidad con la regla de eliminación se elimina.

    Así, si en el editor de modelos de datos que tienen dos entidades Alpha y Beta con una relación:

    Alpha.betas<-->>Beta.alpha

    … entonces usted realmente tiene dos relaciones como:

    Alpha.betas--(delete rule)-->>Beta.alpha
    Beta.alpha--(delete rule)-->Alpha.betas

    Que nunca desea configurar una regla de eliminación como este:

    Alpha.betas--(cascade)-->>Beta.alpha
    Beta.alpha--(cascade)-->Alpha.betas

    … porque la eliminación de cualquier Beta instancia eliminar el asociado Alpha objeto que va a provocar la eliminación de todo lo relacionado con Beta objetos. Dependiendo de los detalles de su modelo de datos, una recíproca de la cascada se puede eliminar una gran cantidad de datos por accidente.

    Lo que realmente desea es:

    Alpha.betas--(cascade)-->>Beta.alpha
    Beta.alpha--(nullify)-->Alpha.betas

    Ahora, cuando se elimina el Alpha objeto, se puede eliminar todos los asociados Beta objetos.

    Cuando una cascada está bloqueada, generalmente es un problema con una relación requerida. No se puede decir con certeza, sin más detalles del modelo de datos.

    • Pregunta rápida, cuando ejecuto [context deleteObject:EntityA]; esto asegurará que todos los betas son eliminados a la derecha, si lo he configurado tal y como lo han en los últimos snipit de código?
    • Asumiendo que no existe algo más el bloqueo de la eliminación.
    • Pero lo que si puedo eliminar todas las Betas? Cómo hacer Alfa eliminar automáticamente en tal caso?
    • Sólo un pensamiento: Establecer un mínimo de 1 para la relación y la eliminación de errores para la última versión beta. Controlar el error mediante la eliminación de la relacionada con la Alfa. No estoy seguro si funciona de esta manera, aunque.
    • Ahora, cuando se elimina el Alfa objeto, se puede eliminar todos los asociados Beta objetos. pero, supongamos que yo no quiero eliminar la Beta objeto si no está asociada con ningún otro objeto.¿cómo es esto posible??
  2. 3

    Depende de lo que eliminar las reglas que están utilizando.

    Aquí es lo que Apple dijo en su documento:

    «Cuando se elimina un objeto administrado es importante tener en cuenta su
    las relaciones y, en particular, la eliminación de las reglas especificadas por el
    relaciones. Si todos los de un objeto administrado la relación de las reglas de eliminación
    se Anulan, entonces para ese objeto, al menos, no hay ningún trabajo adicional
    hacer (puede que tenga que considerar otros objetos que estaban en la
    destino de la relación—si la relación inversa fue
    obligatorio o había un límite inferior en la cardinalidad, entonces el destino
    objeto o los objetos pueden estar en un estado no válido). Si una relación
    eliminar la regla es la Cascada, luego de eliminar un objeto puede resultar en la
    la eliminación de los demás. Si una regla es Negar, a continuación, antes de eliminar un
    objeto debe quitar el objeto de destino o los objetos de la
    relación, de lo contrario obtendrá un error de validación cuando se guarda.
    Si una regla de eliminación No es la Acción, entonces usted debe asegurarse de que usted tome
    todas las medidas que sean necesarias para asegurar la integridad del objeto
    gráfico».

    El enlace de «Relación de las Reglas de eliminación.»: http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html#//apple_ref/doc/uid/TP40001857-SW1

Dejar respuesta

Please enter your comment!
Please enter your name here