Цель c Основные данные Сохранение множества отношений - PullRequest
2 голосов
/ 15 марта 2012

У меня есть установка, в которой два объекта связаны отношением «многие ко многим»

artist << ---- >> events

, т. Е. Артист может участвовать во многих событиях.На мероприятии может присутствовать много художников, которые посещают

Так что я понимаю, что если отношение одно к многим, скажем, событие artist <--- >>, тогда я могу просто создать объекты события и назначить объект исполнителя для отношения.

Однако, поскольку оба конца много ко многим, как мне сохранить это отношение?В настоящее время я пытался сначала сохранить объект события, затем я помещаю объекты исполнителей в NSSet и назначаю набор указателю на событие nsset Artist.

Но когда я возвращаюсь к запросу event.artists, я получаю 0.

Итак, как вы сохраняете много-много связей для основных данных?

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

Всякий раз, когда мне нужна связь «многие ко многим», я меняю ее на две отношения «один ко многим», например:

  1. Создайте новую сущность, например ArtistEvent
  2. Добавить отношение один ко многим из Artist в ArtistEvent Artist <--->> ArtistEvent
  3. Добавить отношение один ко многим из Event в ArtistEvent ArtistEvent <<---> Event

Ваша общая диаграмма выглядит следующим образом:

Artist <--->> ArtistEvent <<---> Event

Теперь, чтобы создать новые отношения между художником и событием, вы просто создаете новое ArtistEvent и устанавливаете его свойство Artist для художника, а его свойство события для события.

Это добавляет дополнительный уровень косвенности, если вы хотите найти (скажем) детали всех событий, которые посетит художник, но оно того стоит для улучшенной нормализации отношений.

0 голосов
/ 15 июня 2012

Лучший способ установить правильные отношения для графа объектов, который вы описываете, состоит в том, чтобы создать сущность «Событие» и добавить связь (для согласованности и ясности), называть ее «художниками», которая будет иметь «к»много "соединение (которое вы установите в инспекторе модели данных в XCode);

Затем создайте сущность с именем" Artist "и аналогичным образом создайте связь под названием" events "с" to-many "отношение.

Теперь, в редакторе модели в XCode, выберите сущность «Событие» и установите соединение ее отношения «художники», под «Назначением», чтобы указать на сущность «Исполнитель».Сделайте то же самое для объекта «Artist» и установите его отношение «events», чтобы указать «Events».Обязательно установите также и обратные значения (т. Е. Обратное для «художников», установленное на «события», обратное для «событий», настроенное на «художники»).

Теперь «события» - это набор, который содержитСущности «Artist» и «Artist» - это набор, содержащий сущности «Event».Однако эти наборы НЕ являются изменяемыми.

Чтобы добавить сущность «Исполнитель» в набор «художники», сначала необходимо создать изменяемый набор прокси-серверов, подобный этому

NSManagedObject *someEvent = [NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:context];
NSManagedObject *newArtist = [NSEntityDescription insertNewObjectForEntityForName:@"Artist" inManagedObjectContext:context];

NSMutableSet *artistMutableSet = [Event mutableSetValueForKey:@"artists"];
[artistsMutableSet addObject:newArtist];

Чтобы добавить событие«сущность к« событиям »установлена, вы делаете наоборот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...