Моделируйте и заполняйте основные данные во многих- отношение ко многим с атрибутом

Я пытаюсь создать простую модель Core Data, подобную следующей:

Order(code, customer)
Book(code, title, price)
OrderBook(order_code, book_code, quantity)

Из документации Core Data я вижу, что это Невозможно смоделировать отношение «многие ко многим», добавив к нему атрибуты. По этой причине я смоделировал это следующим образом.

enter image description here

где:

  • из Order в OrderBook существует отношение «один ко многим» с правилом удаления Cascade
  • form OrderBook - Order существует однозначное отношение с правилом удаления No Action

То же самое верно для ] Книга и Книга заказов .

Первый вопрос: Действительна ли эта модель?

Предполагая, что модель в порядке, я создал соответствующие подклассы NSManagedObject .

Book.h/.m
Order.h/.m
OrderBook.h/.m

Тем не менее, у меня есть необходимость заполнить соответствующую базу данных с помощью механизма Core Data. Для этого я создал соответствующие категории, подобные приведенным ниже, где каждая категория отвечает за создание себя (для поддержки инкапсуляции объекта).

Book+Creation.h/.m
Order+Creation.h/.m
OrderBook+Creation.h/.m

Например, категория Книга + Создание имеет метод класса, подобный следующему:

+ (Book *)bookWithXMLElement:(GDataXMLElement *)xmlElement inManagedObjectContext:(NSManagedObjectContext *)context;

Теперь у меня есть проблема, и я не знаю, как ее решить.

Модельная популяция должна происходить в разное время. Сначала заполняется таблица для книг (я создаю каталог книг из файла xml). По завершении я могу заполнять таблицы заказов и книги заказов.Для заполнения этих таблиц я использую следующий XML-файл:

<orders>
  <order>
     <code>1234</code>
     <book>2567</book>
     <customer>299</customer>
     <quantity>4</quantity>
  </order>
</orders>

Для создания управляемого объекта Order я создал следующий метод в его категории Order + Creation :

+ (Order *)orderWithXMLElement:(GDataXMLElement *)xmlElement inManagedObjectContext:(NSManagedObjectContext *)context;

После создания объект передается в категорию метода класса OrderBook + Creation для создания управляемого объекта 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;
}

Не хватает того, как создать (или получить) объект Book , чтобы назначить его объекту OrderBook .

Второй вопрос: Как мне получить объект Book и назначить его OrderBook ? Нужно ли мне создавать NSFetchRequest , чтобы получить нужный объект Book (тот, который имеет тот же код в XML-файле, например 2567 )? Если да, то есть ли механизм для повышения производительности запроса на выборку?

Помните, что таблица book уже заполнена.

Надеюсь, это ясно. Заранее спасибо.

7
задан Lorenzo B 16 February 2012 в 16:25
поделиться