Estoy tratando de establecer un modelo simple de datos básicos como la siguiente:del modelo y de poblar la base de datos de muchos-a-muchos relación con el atributo
Order(code, customer)
Book(code, title, price)
OrderBook(order_code, book_code, quantity)
De la documentación de Datos Básicos veo que no es posible modele una relación de muchos a muchos agregándole atributos. Por esta razón, lo modelé como el siguiente.
donde:
Order
-OrderBook
existe una relación uno-a-muchos con una regla de supresión Cascade- forma
OrderBook
aOrder
hay una relación de uno a uno con una regla de eliminación No Acción
Lo mismo es válido para Book
y OrderBook
.
Primera pregunta: ¿Es este modelo válido?
Suponiendo que el modelo está bien, creé las subclases NSManagedObject
correspondientes.
Book.h/.m
Order.h/.m
OrderBook.h/.m
Dicho esto, tengo la necesidad de completar el db correspondiente por medio del mecanismo de datos básicos. Para hacer esto, creé las categorías correspondientes como las siguientes, donde cada categoría es responsable de crearse a sí misma (para mantener la encapsulación de objetos).
Book+Creation.h/.m
Order+Creation.h/.m
OrderBook+Creation.h/.m
Por ejemplo Book+Creation
categoría tiene un método de clase como la siguiente:
+ (Book *)bookWithXMLElement:(GDataXMLElement *)xmlElement inManagedObjectContext:(NSManagedObjectContext *)context;
ahora tengo un problema y no sé cómo resolverlo.
La población modelo tiene que suceder en diferentes momentos. La tabla de libros está poblada primero (estoy creando un catálogo de libros de un archivo xml). Una vez que termine, puedo completar las tablas de orden y libro de órdenes. Para rellenar estas tablas que estoy usando un archivo XML como el siguiente:
<orders>
<order>
<code>1234</code>
<book>2567</book>
<customer>299</customer>
<quantity>4</quantity>
</order>
</orders>
Para crear un objeto gestionado Order
He creado el siguiente método en su categoría Order+Creation
:
+ (Order *)orderWithXMLElement:(GDataXMLElement *)xmlElement inManagedObjectContext:(NSManagedObjectContext *)context;
Una vez creado, el objeto se pasa a la categoría OrderBook+Creation
método de clase para crear un objeto gestionado OrderBook
:
+ (OrderBook *)orderWithXMLElement:(GDataXMLElement *)xmlElement withOrder:(Order*)order inManagedObjectContext:(NSManagedObjectContext *)context
{
OrderBook* orderBook = [NSEntityDescription insertNewObjectForEntityForName:@"OrderBook" inManagedObjectContext:context];
orderBook.order = order;
//orderBook.book = <-- how can I retrieve the book?
return orderBook;
}
Lo que falta es cómo crear (o recuperar) el objeto Book
para asignarlo al objeto OrderBook
.
Segunda pregunta: ¿Cómo puedo recuperar un objeto Book
y asignarlo a OrderBook
? ¿Debo crear un NSFetchRequest
para obtener el objeto correcto Book
(el que tiene el mismo código en el archivo xml, por ejemplo, <book>2567</book>
)? Si es así, ¿hay un mecanismo para mejorar el rendimiento de la búsqueda de búsqueda?
Recuerde que la tabla de libros ya está llena.
Espero que esté claro. Gracias de antemano.
Lo siento, pero ¿por qué downvote? –
Con su modelo actual, si tiene un objeto de libro de pedidos que tiene un atributo de libro y orden, si elimina el libro o el pedido, se eliminará el objeto del libro de pedidos. ¿Es eso lo que quieres? – jrturton
@jrturton gracias por su respuesta. Sí, es lo que quiero. ¿Tienes alguna sugerencia? –