unicidad tipos restricciones restriccion referencial integridad funciona entidad ejemplos ejemplo dominio datos cómo claro ios core-data

ios - tipos - restricciones de integridad mysql



¿Por qué la entidad no puede tener restricciones de unicidad con una relación inversa obligatoria de uno? (2)

Haga sus propiedades de relación "opcionales". Eso solucionó este problema en mi caso.

¿Por qué la entidad no puede tener restricciones de unicidad con una relación inversa obligatoria de uno? Teniendo dos entidades:

  • Persona

nombre de la propiedad

relación: departamento (a uno, no opcional)

  • Departamento

propiedad: título (restricción única)

relación: persona (to-many, opcional)

El modelo no se compilará en iOS 9, XCode 7.0.1 con error de entidad mal configurado:

Entidad mal configurada: el departamento de la entidad no puede tener restricciones de unicidad y una relación inversa obligatoria entre personas.

Actualización: la pregunta sigue siendo relevante en XCode 8.3.1.


Respuesta corta:

El problema subyacente es probablemente causado por el estándar sqlite. No estoy seguro de eso. Sin embargo, es muy probable que se deba a las limitaciones de sqlite. Encontré algunas publicaciones en Internet, donde las personas tenían problemas con múltiples restricciones en una tabla y esa es probablemente la razón por la que funciona la solución de dos tablas.

Respuesta larga:

Es bastante tarde, pero espero que ayude de todos modos.

Esto ocurre cuando su Entidad tiene una restricción única y una relación obligatoria. Supongo que es debido a los comportamientos de restricción únicos agregados en iOS 9.0. Sin embargo puedes resolver esto de dos maneras:

Elimina la restricción única o hace que la relación sea opcional. Podrías manejar una relación opcional en código. Pero no será una buena solución.

O

Puedes usar una solución alternativa. Puedes tener ambos. Puedes crear una súper clase con una restricción única. Sin embargo, esto no funcionará sin problemas, también.

Vamos a tener tres entidades. A, B y C.

A es tu súper clase y B es una subclase de A y C es una subclase de A, también. A tiene una restricción única en su propiedad primaryKey. Al guardar instancias de B y C, no puede tener una B y C con la misma clave principal. Porque CoreData gestionará tanto como A.

Podría cambiar A para tener dos propiedades:

  • int: originalPrimaryKey (SIN restricción única)
  • cadena: primaryKey (restricción única)

Ahora puede asignar sus primaryKeys a originalPrimaryKey y al configurar originalPrimaryKey puede establecer la propiedad primaryKey de la cadena en CLASS_NAME. {OriginalPrimaryKey}. Esto te permitiría tener el comportamiento que esperas. Pero tienes que agregar una solución para primaryKeys.