private static void DeleteTimeout() { Debug.Assert(CleanInfo != null); DateTime limit = DateTime.UtcNow - kExpiredTime; CleanInfo.Count += 1; bool doClean = (CleanInfo.Count > kExpiredCount || CleanInfo.LastestCleanTime < limit); if (doClean == true) { #region Do Clean expired session objects. TransactionOptions opt = new TransactionOptions(); opt.IsolationLevel = IsolationLevel.ReadCommitted; opt.Timeout = new TimeSpan(0, 0, 20); using (TransactionScope trans = new TransactionScope(TransactionScopeOption.Required, opt)) { using (TTSessionDbContext db = new TTSessionDbContext()) { TTSqlHelper<TTSession> helper = new TTSqlHelper<TTSession>(db); string sql = "WHERE " + helper.ColumnNameOf(x => x.LastAccessTimeUTC) + " < {0}"; helper.Delete(sql, limit); CleanInfo.Count = 0; CleanInfo.LastestCleanTime = DateTime.UtcNow; TTDbInfo dbInfo = db.DbInfos.Single(obj => obj.Key.Equals(TTDbInfo.CleanSessionInfo)); dbInfo.Save(CleanInfo); db.SaveChanges(); trans.Complete(); } } #endregion } }
protected virtual void Dispose(bool disposing) { if (this._isDisposed == true) return; if (disposing) { if (_db != null) { _db.Dispose(); _db = null; } this._isDisposed = true; } }