1. Cascade 级联关系。
2. Deny 禁止
3. Nullify 作废
当实体之间创建了关系的时候,我们需要判断是否建立级联关系。 例如 人和身份证是一对一的。两者之间关系反转。即 人有身份证,身份证包含人。当删除身份证的时候,人肯定不能被删除。所以 这就需要我们判断级联关系。
#pragma mark - 一对一
/**
* 一对一的关系
*/
- (void)oneToOne {
CoreDataManager *manager = [CoreDataManager sharedManager];
// person
Person *p = (Person *)[manager managedObjectWithEntityName:NSStringFromClass([Person class])];
[p setValue:@"小明" forKey:@"name"];
// card
CardID *card = (CardID *)[manager managedObjectWithEntityName:NSStringFromClass([CardID class])];
[card setValue:@"1518" forKey:@"cID"];
// 这里已经建立了双向的关系 这种情况类似于 card为数据库中的外键。
// 小明的身份证为card
[p setValue:card forKey:@"cardID"];
[manager saveData];
Person *person = [card valueForKey:@"person"];
NSLog(@"%@", [person valueForKey:@"name"]);
}
#pragma mark - 一对多
/**
* 一对多的关系
*/
- (void)oneToMany {
CoreDataManager *manager = [CoreDataManager sharedManager];
// teacher
Teacher *t1 = (Teacher *)[manager managedObjectWithEntityName:NSStringFromClass([Teacher class])];
[t1 setValue:@"大力哥" forKey:@"name"];
Teacher *t2 = (Teacher *)[manager managedObjectWithEntityName:NSStringFromClass([Teacher class])];
[t2 setValue:@"大力哥2" forKey:@"name"];
// student
Student *s1 = (Student *)[manager managedObjectWithEntityName:NSStringFromClass([Student class])];
[s1 setValue:@"学生1" forKey:@"name"];
Student *s2 = (Student *)[manager managedObjectWithEntityName:NSStringFromClass([Student class])];
[s2 setValue:@"学生2" forKey:@"name"];
Student *s3 = (Student *)[manager managedObjectWithEntityName:NSStringFromClass([Student class])];
[s3 setValue:@"学生3" forKey:@"name"];
// 老师1有两个学生 s1和s2
[t1 addStudentsObject:s1];
[t1 addStudentsObject:s2];
// 老师2有两个学生 s3
[t2 addStudentsObject:s3];
// 同步数据库
if ([manager saveData]) {
NSLog(@"保存成功!");
}
// 1. 查找学生3的老师
// 2. 查找老师1的学生
[self find];
}
- (void)find {
// 1. 查找学生3的老师
// 2. 查找老师1的学生
NSLog(@"---------1 .查找名字为学生3的学生----------");
// 查找名字为学生3的学生
NSArray *array = [[CoreDataManager sharedManager] quertObjsFromCoreDataWithEntityName:NSStringFromClass([Student class]) params:@{@"name":@"学生3"}];
for (Student *s in array) {
NSLog(@"-----先找到名字为学生3的学生 才能找其老师----2.查找学生3的老师----------");
Teacher *t = [s valueForKey:@"teacher"];
NSLog(@"t_name = %@", [t valueForKey:@"name"]);
}
NSLog(@"---------查找名字为大力哥的老师----------");
// 查找名字为大力哥的老师
NSArray *array2 = [[CoreDataManager sharedManager] quertObjsFromCoreDataWithEntityName:NSStringFromClass([Teacher class]) params:@{@"name":@"大力哥"}];
for (Teacher *t in array2) {
NSLog(@"-----先找到名字为大力哥的老师 才能找其学生----2.查找大力哥的学生----------");
NSSet *students = [t valueForKey:@"students"];
NSEnumerator *enumrator = [students objectEnumerator];
Student *s;
while(s = [enumrator nextObject]) {
NSLog(@"s_name = %@", [s valueForKey:@"name"]);
}
}
}