private void AddWithSqlDependency(string key, TValue item, SqlCacheDependency sqlDependency) { if (key == null) { throw new ArgumentNullException(nameof(key)); } if (sqlDependency == null) { throw new ArgumentNullException(nameof(sqlDependency)); } _Cache.SetObject(key, new CacheItem <TValue>() { AbsoluteExpiration = DateTime.MinValue, SlidingExpiration = TimeSpan.Zero, Item = item }); Policy.Handle <Exception>() .RetryForever() .Execute(() => { // subscribe to sql dependency _channel = new ChangeTrackingChannelHelper((ISqlChangeCallback)this).OpenChannel(); _channel.Subscribe(key, sqlDependency.TableName); } ); // subscribe client for callback SubscribeCallback(key, sqlDependency.Callback); }
public TValue GetOrAdd(string key, Func <TValue> item, SqlCacheDependency sqlDependency) { var itemFromCache = Get(key); if (!EqualityComparer <TValue> .Default.Equals(itemFromCache, default(TValue))) { return(itemFromCache); } var result = item(); AddWithSqlDependency(key, result, sqlDependency); return(result); }
public void Add(string key, TValue item, SqlCacheDependency sqlDependency, string[] tags) { AddWithSqlDependency(key, item, sqlDependency); _Cache.AddTagsToKey(key, tags); }
public void Add(string key, TValue item, SqlCacheDependency sqlDependency) { AddWithSqlDependency(key, item, sqlDependency); }