示例#1
0
        protected override Task RemoveKeyAsync(string cacheKey)
        {
            var cacheEntries = _tokenCacheDb.Records.Where(c => c.CacheKey == cacheKey);

            _tokenCacheDb.Records.RemoveRange(cacheEntries);
            _tokenCacheDb.SaveChanges();
            return(Task.CompletedTask);
        }
        protected override async Task WriteCacheBytesAsync(string cacheKey, byte[] bytes)
        {
            if (_cacheDbRecord == null)
            {
                _cacheDbRecord = new TokenCacheDbRecord
                {
                    CacheKey = cacheKey
                };
            }

            _cacheDbRecord.CacheBits = _dataProtector.Protect(bytes);
            _cacheDbRecord.LastWrite = DateTime.Now;

            try
            {
                // Update the DB and the lastwrite
                _tokenCacheDb.Entry(_cacheDbRecord).State = _cacheDbRecord.TokenCacheId == 0 ? EntityState.Added : EntityState.Modified;
                _tokenCacheDb.SaveChanges();
            }
            catch (DbUpdateConcurrencyException)
            {
                // Record already updated on a different thread, so just read the updated record
                await ReadCacheBytesAsync(cacheKey).ConfigureAwait(false);
            }
        }