Iphone 通过多个传入的一对多关系维护核心数据实体的完整性
我有一个核心数据存储,其中包含许多描述媒体项的MediaItem实体。我还有新闻项目,它与许多媒体项目有一对多的关系。到目前为止还不错 然而,我也有PlayerItems和GalleryItems,它们与MediaItems也有一对多的关系。因此,MediaItems是跨实体共享的 鉴于许多实体可能具有一对多关系,我如何设置从一个MediaItem到所有(1个或多个)与其有关系的实体的互惠关系,而且,当这些互惠关系的数量降至0时,我如何实现删除MediaItem的规则Iphone 通过多个传入的一对多关系维护核心数据实体的完整性,iphone,database-design,core-data,one-to-many,data-integrity,Iphone,Database Design,Core Data,One To Many,Data Integrity,我有一个核心数据存储,其中包含许多描述媒体项的MediaItem实体。我还有新闻项目,它与许多媒体项目有一对多的关系。到目前为止还不错 然而,我也有PlayerItems和GalleryItems,它们与MediaItems也有一对多的关系。因此,MediaItems是跨实体共享的 鉴于许多实体可能具有一对多关系,我如何设置从一个MediaItem到所有(1个或多个)与其有关系的实体的互惠关系,而且,当这些互惠关系的数量降至0时,我如何实现删除MediaItem的规则 对于记录(如果它对其他人
对于记录(如果它对其他人有用),我通过创建一个抽象的
MediaLinkedEntity
类来解决这个问题,该类与MediaItems
具有一对多关系(在MediaLinkedEntity
结尾命名为MediaItems
,在MediaItem
结尾命名为LinkedEntity
)。然后,我将该实体子类化为新闻项
和GalleryItems
,并在MediaLinkedEntity
中实现了以下-PrepareOrderItem
方法:
- (void)prepareForDeletion {
NSSet *mediaItems = self.MediaItems;
NSSet *linkedEntities;
// step through all media items we link to
for( MediaItem *mediaItem in mediaItems ){
linkedEntities = mediaItem.LinkedEntities;
if( [ linkedEntities count ] == 1 && [ linkedEntities containsObject: self ] ){
// if this MediaLinkedEntity is the only entry in the mediaItem's linked entities list, delete it.
[ mediaItem.managedObjectContext deleteObject: mediaItem ];
}
}
[ super prepareForDeletion ];
}
基本上,按照马库斯下面的回答
然而,我也有PlayerItems和GalleryItems,它们与MediaItems也有一对多的关系。因此,MediaItems是跨实体共享的
最简单但不太漂亮的方法是为每个MediaItem关系创建反向关系
另一种可能是创建一个与MediaItem有关系的抽象父实体,并从这个通用实体继承GalleryItem、NewsItems、PlayerItem
鉴于许多实体可能具有一对多关系,我如何设置从一个MediaItem到所有(1个或多个)与其有关系的实体的互惠关系,而且,当这些互惠关系的数量降至0时,我如何实现删除MediaItem的规则
有几种方法可以创建这种行为。
您可以使用KVO观察MediaItem的所有反向关系
然而,我也有PlayerItems和GalleryItems,它们与MediaItems也有一对多的关系。因此,MediaItems是跨实体共享的
最简单但不太漂亮的方法是为每个MediaItem关系创建反向关系
另一种可能是创建一个与MediaItem有关系的抽象父实体,并从这个通用实体继承GalleryItem、NewsItems、PlayerItem
鉴于许多实体可能具有一对多关系,我如何设置从一个MediaItem到所有(1个或多个)与其有关系的实体的互惠关系,而且,当这些互惠关系的数量降至0时,我如何实现删除MediaItem的规则
有几种方法可以创建这种行为。
您可以使用KVO观察MediaItem的所有反向关系,最好的答案是使用一个抽象的父实体,以通用的方式处理关系。这将允许您减少模型中的关系数
至于delete规则,您应该为“one”创建一个子类并实现它们的
-preparefordelection
方法来检查多个方面的孤立项,然后在出现孤立项时将其删除。最好的解决方法是使用一个抽象的父实体以通用方式处理关系。这将允许您减少模型中的关系数
至于删除规则,您应该为关系的“一”侧创建一个子类,并实现它们的-preparefordelection
方法来检查多侧的孤立项,然后在发生时删除它们