iphone - tipos - que es una clave principal en access
datos principales: la identificación de la clave principal de una fila en la base de datos (2)
Como dijo Barry Wark, recuerde siempre que Core Data no es un orm. Los detalles de Pure SQL no están expuestos al usuario y cada fila es solo un objeto. Por cierto, en algún momento deberás acceder a la "clave principal", por ejemplo, cuando necesites sincronizar la base de datos coredata con bases de datos sql externas (en mi caso, la necesité en una función de devolución de llamada para cambiar el estado de un objeto luego de INSERTAR con éxito en el db remoto). En este caso, puede usar:
objectId=[[[myCoredataObject objectID] URIRepresentation] absoluteString]
eso devolverá una cadena como: x-coredata: // 76BA122F-0BF5-4D9D-AE3F-BD321271B004 / Object / p521 que es la identificación única utilizada por coredata para identificar ese objeto.
Si desea recuperar un objeto con esa ID única:
NSManagedObject *managedObject= [managedObjectContext objectWithID:[persistentStoreCoordinator managedObjectIDForURIRepresentation:[NSURL URLWithString:objectId]]];
NB: Recuerde que si el receptor aún no se ha guardado en el contexto de CoreData, el ID del objeto es un valor temporal que cambiará cuando se guarde el objeto.
Supongamos que tengo una lista de libros almacenados en Core Data. Quiero buscar un libro por su ID de clave principal. Sé que el archivo sqlite creado por Core Data tiene una columna de ID en cada tabla, pero esto no parece estar expuesto a mí de todos modos.
¿Alguien tiene alguna recomendación?
¡Gracias!
-[NSManagedObject objectID]
es la ID única para una instancia de objeto en Core Data. Se puede serializar a través de -[NSManagedObjectID URIRepresentation]
. Puede recuperar el objectID
de objectID
de un coordinador de tienda persistente con -[NSPersistentStoreCoordinator managedObjectIDForURIRepresentation:]
y luego obtener el objeto desde un contexto de objeto gestionado con -[NSManagedObjectContext objectWithID:]
.
PERO
Debe tener en cuenta que Core Data no es un ORM. Es un marco de gestión de gráficos de objetos . Es decir, usa SQLite (y las identificaciones de fila únicas) como backend es puramente un detalle de implementación. Cuanto antes pueda salirse de la mentalidad SQL / RDBMS, más rápido se sentirá satisfecho con Core Data. En lugar de tratar de encontrar un objeto a partir de un ID almacenado, considere por qué necesita ese objeto y qué objeto lo necesita. Si una instancia de la clase Foo
necesita poder acceder a una instancia de la clase Bar
, ¿por qué no simplemente crear una asociación desde el Foo
a la Bar
y establecer la instancia de Bar
adecuada como destino de la asociación en la instancia de Foo
adecuada? Deje que Core Data haga un seguimiento de los ID de objeto.