首先,您应该尽自己所能去摆脱SQL的心态。核心数据不是的一个ORM。这是一个对象图管理框架,刚刚发生使用SQLite作为一个可能的持久性后端。尽管您可以通过环境变量查看它使用的SQL(用于调试),但SQL是一个私有的实现细节。核心数据本来可以在没有任何SQL的情况下实现。
所以,尽量不要用数据库表来思考。你有一个Deal
isntances的集合。你想要他们的财产?使用Key-value Coding可以获取这些实例的属性以及相关的Instrument
实例。假设你有一个Deals
例如NSSet
名为deals
:
[deals valueForKey:@"dealProperty"];
会给你的dealProperty
值的NSSet
从每个Deal
实例。如果你想一次获得多个属性,你可以使用-[NSObject(NSKeyValueCoding) dictionaryWithValuesForKeys:]
。您只能使用此方法获得“一层深”的密钥,因此只能'dealProperty1','dealProperty2',但不是'dealRelation.relationProperty'或'dealRelation。@ count'。
要获得“嵌套”的属性,只需使用一键路径:
[deals valueForKeyPath:@"instrument.instrumentProperty"];
会给你一个与每个Deal
实例相关联的Instrument
实例的instrumentProperty
的值,假设instrument
是一个一对一关系从Deal
到Instrument
。如果关系是一对多关系,那么您将获得一组instrumentProperty
值。
你总是可以做到这一点更明确(显然这段代码没有做任何事情,因为我省略了分号等甚至没有语法正确,但它表示外形):
for(Deal *deal in deals) {
//use attribute access to get properties of deal and associated instrument
deal.dealProperty
deal.instrument.instrumentProperty //for one-to-one
for(Instrument *instrument in deal.instruments) { //for one-to-many instruments
instrument.instrumentProperty;
}
}
使用枚举适当的集合。