private Core.DB.Sessions GetSessionItem(string id) { Core.DB.Sessions item = null; if (_cache.TryGetValue(id, out item) && !item.IsDeleted) { return(item); } else { return(null); } }
/// <summary> /// Создание пустой записи о новой сессии в хранилище сессий. /// </summary> public override void CreateUninitializedItem(HttpContext context, string id, int timeout) { var session = new Core.DB.Sessions { SessionId = id, IdUser = 0, Created = DateTime.UtcNow, Expires = DateTime.UtcNow.AddMinutes(timeout), LockDate = DateTime.UtcNow, Locked = false, ItemContent = null, LockId = 0, }; _cache[id] = session; SaveChanges(); }
private void SaveChanges() { lock (_saveTaskSyncRoot) { if (_saveTask == null) { _saveTask = Task.Delay(_timeoutSave).ContinueWith(t => { //lock (SyncRootSave) { try { _cache.ToList().ForEach(p => { lock (p.Value.SyncRoot) { if (p.Value.DateLastChanged > p.Value.DateLastSaved) { var entityState = _dbContext.GetState(p.Value); if (!p.Value.IsDeleted) { if (entityState == ItemState.Detached) { _dbContext.Sessions.AddOrUpdate(p.Value); p.Value.DateLastSaved = DateTime.Now; } } else if (p.Value.IsDeleted) { if (entityState != ItemState.Detached) { _dbContext.DeleteEntity(p.Value); Core.DB.Sessions item = null; _cache.TryRemove(p.Key, out item); } } } } }); _dbContext.SaveChanges(); } catch (UpdateConcurrencyException ex) { Debug.WriteLine("SessionStateProvider: Update error2: {0}", ex.Message); foreach (var entry in ex.Entries) { Core.DB.Sessions item = entry.Entity as Core.DB.Sessions; _dbContext.Sessions.Delete(entry.Entity as Core.DB.Sessions); _cache.TryRemove(item.SessionId, out item); } } catch (Exception ex) { Debug.WriteLine("SessionStateProvider: Update error: {0}", ex.Message); } finally { lock (_saveTaskSyncRoot) _saveTask = null; } } }); } } }