/// <summary> /// Get the specified key. /// </summary> /// <param name="key">Key.</param> internal virtual TData Get(DataContext context, Guid key, IPrincipal principal) { int tr = 0; var cacheService = new AdoPersistenceCache(context); var cacheItem = cacheService?.GetCacheItem <TData>(key); if (cacheItem != null) { if (cacheItem.LoadState < context.LoadState) { cacheItem.LoadAssociations(context, principal); cacheService?.Add(cacheItem); } return(cacheItem); } else { cacheItem = this.QueryInternal(context, o => o.Key == key, Guid.Empty, 0, 1, out tr, principal, false)?.FirstOrDefault(); if (cacheService != null) { cacheService.Add(cacheItem); } return(cacheItem); } }