private object GetOrAdd(Type type, IdAndMemberName idAndMemberName, object entity) { if (!settings.EnableCache && !ReturnPreviouslyLoadedEntity) { return(entity); } var entitiesByIdAndMemberName = cache.GetOrAdd(type, t => new ConcurrentDictionary <IdAndMemberName, object>(concurrencyLevel: 2, capacity: 1)); object entityFromCache = entitiesByIdAndMemberName.GetOrAdd(idAndMemberName, k => entity); return(ReturnPreviouslyLoadedEntity ? entityFromCache : entity); }
private bool TryGet(Type type, IdAndMemberName idAndMemberName, out object value) { if (!settings.EnableCache && !ReturnPreviouslyLoadedEntity) { value = null; return(false); } ConcurrentDictionary <IdAndMemberName, object> entitiesByIdAndMemberName; if (cache.TryGetValue(type, out entitiesByIdAndMemberName)) { return(entitiesByIdAndMemberName.TryGetValue(idAndMemberName, out value)); } value = null; return(false); }