Какая связь между выборкой и односторонней связью в базовых данных? - PullRequest
0 голосов
/ 14 апреля 2011

Почему «выборка» означает односторонние отношения

Какая связь между извлечением и односторонним движением?

1 Ответ

1 голос
/ 14 апреля 2011

Ну, я не уверен, что понимаю ваш вопрос, но я постараюсь ответить в контексте простой доменной модели.

Допустим, у вас есть класс Person и класс Computer, оба расширяют NSManagedObject. Person связан с Computer через односторонние отношения, NSSet с именем computers.

Это позволит вам сказать в своем коде:

Person *person = // ... (loaded from database)
NSSet *computers = person.computers;
for (Computer *computer : computers) {
   // do something fun
}

Однако, поскольку это односторонние отношения, вы бы не смогли бы сделать это:

Computer *computer = // loaded from DB
Person *person = computer.person;  // This line won't work

Следовательно, поскольку он не будет работать - нет обратной связи - единственный способ получить связанный класс Person - это создать запрос Fetch для запроса к базе данных и найти экземпляры Person, в которых компьютер является член.

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSPredicate *predicate = // define your NSPredicate to find the Person object here
[fetchRequest setPredicate:predicate];
NSError *error = nil;
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
[fetchRequest release];

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

Person *person = computer.person;
...