簡體   English   中英

通過許多傳入的一對多關系維護核心數據實體的完整性

[英]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 (名為MediaItemsMediaLinkedEntityLinkedEntitiesMediaItem結束)。 然后,我將此實體GalleryItemsNewsItemsGalleryItems並在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM