核心数据-如何跟踪一组实体的子集



我是核心数据的新手,正在寻找可能是一个简单问题的指导:

我有一组实体,每个实体可能属于也可能不属于某个集合。我希望能够以最有效的方式检索那些属于集合的元素。我该如何设置呢?

让我们更具体一点。假设所讨论的实体是一个Person。我的数据存储中有许多不同的Person实体。其中一些人为苹果公司工作。我经常只想检索那些为Apple工作的person。我该如何设置呢?

基于我对Core Data的幼稚理解,我有两个选择。(1)创建另一个名为AppleEmployees的实体,与Person有多对多关系,必要时将Persons添加到AppleEmployee实体中。或者(2)在Person实体上创建一个属性,用于跟踪Person的雇主,并相应地过滤获取请求。

注意:我不担心跟踪许多不同的雇主(继续这个比喻)。要么为苹果工作,要么不为苹果工作;我的关键问题是能否把苹果公司的员工找来。:)

所以我的问题归结为:这些方法可行吗?如果有,哪个是最好的?有更好的方法吗?

我将对Company和Persons管理对象这样做。然后给定一个名为"Apple"的公司:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Company"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", @"Apple"];
[request setPredicate:predicate];
NSArray *results = [managedObjectContext executeFetchRequest:request error:nil];
Company *apple = [results lastObject];
NSSet *applePeople = apple.employees;

set applePeople是所有Person管理对象的集合,这些对象与名称为"Apple"的公司有员工关系(这里没有错误检查…如果你使用这个,可以添加一些。)

公司管理对象:

属性name, NSString *

关系:employees, to many, to Person, NSSet *

个人管理对象:

属性:"name", NSString *

属性:"employeeNumber", NSString *

Relationship: company, to 1, company

员工关系的倒数

你可以改变这个。你可以考虑同时为多家公司工作的承包商,也有很多公司的关系。

最新更新