public bool AddToCache <T>(Guid mediaItemId, T mediaItemInfo, bool createCopy = true) where T : BaseInfo
        {
            if (_cache == null)
            {
                return(false);
            }

            IDictionary <Guid, IList <MediaItemAspect> > aspects = new Dictionary <Guid, IList <MediaItemAspect> >();

            mediaItemInfo.SetMetadata(aspects);

            IList <MultipleMediaItemAspect> externalAspects;

            if (!MediaItemAspect.TryGetAspects(aspects, ExternalIdentifierAspect.Metadata, out externalAspects))
            {
                return(false);
            }

            if (createCopy)
            {
                mediaItemInfo = mediaItemInfo.CloneBasicInstance <T>();
            }

            bool result = false;
            CachedRelationship entry = new CachedRelationship {
                MediaItemId = mediaItemId, MediaItemInfo = mediaItemInfo
            };

            foreach (MediaItemAspect externalAspect in externalAspects)
            {
                result |= AddToCache(externalAspect, entry);
            }
            return(result);
        }
        protected bool TryGetFromCache(BaseInfo mediaItemInfo, out CachedRelationship cachedEntry)
        {
            cachedEntry = null;
            if (_cache == null)
            {
                return(false);
            }

            IDictionary <Guid, IList <MediaItemAspect> > aspects = new Dictionary <Guid, IList <MediaItemAspect> >();

            mediaItemInfo.SetMetadata(aspects);

            IList <MultipleMediaItemAspect> externalAspects;

            if (!MediaItemAspect.TryGetAspects(aspects, ExternalIdentifierAspect.Metadata, out externalAspects))
            {
                return(false);
            }

            foreach (MediaItemAspect externalAspect in externalAspects)
            {
                if (TryGetFromCache(externalAspect, mediaItemInfo, out cachedEntry))
                {
                    return(true);
                }
            }

            //ServiceRegistration.Get<ILogger>().Debug("{0}: Cache miss {1} {2}", _cache.Name, mediaItemInfo.GetType().Name, mediaItemInfo);
            return(false);
        }
        protected bool AddToCache(MediaItemAspect externalAspect, CachedRelationship entry)
        {
            string key        = CreateCacheKey(externalAspect);
            var    newEntries = new Lazy <ConcurrentDictionary <BaseInfo, CachedRelationship> >();
            var    entries    = _cache.AddOrGetExisting(key, newEntries, _cachePolicy) as Lazy <ConcurrentDictionary <BaseInfo, CachedRelationship> > ?? newEntries;

            if (entries.Value.TryAdd(entry.MediaItemInfo, entry))
            {
                //ServiceRegistration.Get<ILogger>().Debug("{0}: Added {1} {2} to cache with Id {3} and Key {4}", _cache.Name, entry.MediaItemInfo.GetType().Name, entry.MediaItemInfo, entry.MediaItemId, key);
                //ServiceRegistration.Get<ILogger>().Debug("{0}: Current entries for external aspect: {1}", _cache.Name, entries.Value.Count);
                return(true);
            }
            return(false);
        }
        protected bool TryGetFromCache(MediaItemAspect externalAspect, BaseInfo mediaItemInfo, out CachedRelationship cachedEntry)
        {
            string key     = CreateCacheKey(externalAspect);
            var    entries = _cache.Get(key) as Lazy <ConcurrentDictionary <BaseInfo, CachedRelationship> >;

            if (entries != null && entries.Value.TryGetValue(mediaItemInfo, out cachedEntry))
            {
                //ServiceRegistration.Get<ILogger>().Debug("{0}: Got {1} {2} from cache with Id {3} and Key {4}", _cache.Name, cachedEntry.MediaItemInfo.GetType().Name, cachedEntry.MediaItemInfo, cachedEntry.MediaItemId, key);
                return(true);
            }
            cachedEntry = null;
            return(false);
        }
 internal RelationshipDeletedEventArgs(CachedRelationship relationship) : base(relationship.Client)
 {
     Relationship = relationship;
 }