我的对象模型有文章和媒体,其中文章以多对多的关系引用媒体。媒体可能有不同的排序,需要存储该媒体相对于文章的顺序,即e,而不是媒体本身。
核心数据在内部生成一个带有直通表的sqlite数据库:
article_id, media_id
Core Data / MagicalRecord对象是文章和媒体:
class Article: NSManagedObject {
...
@NSManaged var media: NSSet
}
class Media: NSManagedObject {
...
}
核心数据中是否有一种方法可以在直通表机制中保持媒体的顺序?相反,每当媒体被文章使用时,我似乎需要创建一个具有自己位置的新媒体记录。
在Django和Rails中,我在模型中使用了一个直通表来存储一个位置/顺序整数,该整数表示本文的这个媒体是按此顺序排列的。该表将包含以下列:
article_id, media_id, position
在核心数据中似乎无法通过自定义字段表来填写?
答案 0 :(得分:2)
我会删除多对多的关系,而是创建第三个实体,比如Reference
,它实现了与你的"通过表"相同的目的。建立从Article
到Reference
,从Media
到Reference
的一对多关系,并添加position
属性:
这几乎完全反映了您的Django / Rails解决方案,但它确实要求您维护position
的{{1}}属性 - 如果您从文章中删除引用,则需要更新{ {1}}文章中任何剩余引用的属性。
<强>或者,... 强>
另一个解决方案是保持多对多关系,但要在数据模型中指定从Article到Media的关系是有序的:
如果检查基础SQLite文件,您会发现它创建了一个带有附加属性的中间表来存储订单。您无法直接访问此值,CoreData会在您向文章的References
关系中插入和删除对象时对其进行更新。