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

时间:2014-03-20 22:55:44

标签: ios objective-c entity-framework core-data

我对核心数据感到陌生,并寻找可能是一个简单问题的指导:

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

让我们更具体一点。假装有争议的实体是一个人。我的数据存储中有许多不同的Person实体。其中一些人为Apple工作。我经常只想检索那些为Apple工作的人。我该如何设置?

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

注意:我并不担心跟踪许多不同的雇主(继续这个比喻)。一个人要么为苹果工作,要么不为;我的批判性调查是能够取得Apple员工。 :)

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

1 个答案:

答案 0 :(得分:1)

我会使用公司和人员管理的对象执行此操作。然后给了一家名为“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 *

关系:员工,对很多人,对人,NSSet *

人员管理对象:

属性:“name”,NSString *

属性:“employeeNumber”,NSString *

关系:公司,与公司

中员工关系的反向关系

你可以改变这一点。您可能会考虑同时为多家公司工作的承包商,并且与许多公司的关系也是如此。