当你会使用单个Coredata数据库表了,那你就会想到,如果两张表有一定的关联了。而且经常会有根据互相关联的表去查找。
其实Coredata的多表关联,以及关联查找功能并没有sqlite3的强大,所以了,如果遇到复杂和太多表的关联情况,意见使用sqlite3或者是对它封装的第三方框架FMBD。Coredat的多表关联,就是建立在简单的使用的基础上添加几点就可以了,如果还不会使用Coredata,可以先进入简单的使用:
http://blog.csdn.net/mjx342112780/article/details/52084297
一、在建立model的实体的时候,先建立子表实体的信息,然后在建立父表实体的信息,在Relationships中建立联接关系。
二、同样生生成两个表的实体类NSManageObject subclass,基中在建立的实体类中,你会发现它会出出以第一个实体类为属性的字段存在,这个就是关联属性。
三、代码使用不同的一些地方,这里我只举例,增加和查找,其他的CURD可以类推
1.增加时
- (IBAction)addMebersAction:(id)sender {
// 创建部门
Department *dep1=[NSEntityDescription insertNewObjectForEntityForName:@"Department" inManagedObjectContext:self.companyContext];
dep1.name=@"iOS";
dep1.creatDate=[NSDate date];
dep1.departNo=@"00000100";
// 创建zhangsan
Employee *emp1 =[NSEntityDescription insertNewObjectForEntityForName:@"Employee" inManagedObjectContext:self.companyContext];
emp1.name=@"zhangsan";
emp1.height=@1.8;
emp1.age=@25;
emp1.depart=dep1;
[self.companyContext save:nil];
}
2.查找时
- (IBAction)findMebersAction:(id)sender {
NSFetchRequest *request =[NSFetchRequest fetchRequestWithEntityName:@"Employee"];
NSPredicate *pre =[NSPredicate predicateWithFormat:@"depart.name=%@",@"iOS"];//以点语法可以去查找
request.predicate= pre;
NSArray *emps = [self.companyContext executeFetchRequest:request error:nil];
NSLog(@"%@",emps);
}
更新和删除都可以以此类推。