public void ReleaseTableWriteLock(ITable table, Transaction transaction) { if (transaction.IsolationLevel == IsolationLevels.ReadCommited || transaction.IsolationLevel == IsolationLevels.RepetableRead) { return; } ILock tableLock = this.tableLocks[table]; var lockInfo = this.lockInventory.GetLockInformation(tableLock, transaction); if (lockInfo.IsWriteLockHeld) { if (lockInfo.IsReadLockHeld) { tableLock.Downgrade(); } else { tableLock.ExitWrite(); // TODO: OnReleased } lockInfo.IsWriteLockHeld = false; } }