[英]Maintaining integrity of Core Data Entities with many incoming one-to-many relationships
我有一個核心數據存儲,其中包含許多描述媒體項的MediaItem實體。 我也有NewsItems,它與許多MediaItems具有一對多關系。 到現在為止還挺好。
但是,我也有PlayerItems和GalleryItems,它們也與MediaItems有一對多的關系。 因此,MediaItem在實體之間共享。
鑒於許多實體可能具有一對多關系,我如何建立從MediaItem到與其有關系的所有(1個或更多)實體的相互關系,此外,我如何實現刪除MediaItems的規則這些互惠關系的數量何時下降到0?
為了記錄(在此情況,在有用的給別人),我通過創建一個抽象的解決了這個MediaLinkedEntity
有一個一對多的關系,以一流的MediaItems
(名為MediaItems
在MediaLinkedEntity
端LinkedEntities
在MediaItem
結束)。 然后,我將此實體GalleryItems
為NewsItems
和GalleryItems
並在MediaLinkedEntity
實現了以下-prepareForDeletion
方法:
- (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 ];
}
本質上,遵循以下Marcus的回答。
最好的答案是有一個抽象的父實體以通用方式處理關系。 這將使您減少模型中的關系數量。
至於刪除規則,您應該為關系的“一側”創建一個子類,並實現它們的-prepareForDeletion
方法來檢查多側的孤立項目,然后在出現孤立項目時將其刪除。
但是,我也有PlayerItems和GalleryItems,它們也與MediaItems有一對多的關系。 因此,MediaItem在實體之間共享。
最簡單但不太漂亮的方法是為每個MediaItem關系創建逆關系。
另一種可能性是創建一個與MediaItem有關系的抽象父實體,並從該通用實體繼承GalleryItem,NewsItems,PlayerItem。
鑒於許多實體可能具有一對多關系,我如何建立從MediaItem到與其有關系的所有(1個或更多)實體的相互關系,此外,我如何實現刪除MediaItems的規則這些互惠關系的數量何時下降到0?
有幾種方法可以創建這種行為。 您可以使用KVO觀察MediaItem的所有逆關系
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.