/// <summary> /// 延长锁的时间 /// </summary> /// <param name="lockData"></param> /// <returns></returns> public DECheckLockResult ExtendLockTime(DELock lockData) { DECheckLockResult result = null; lockData.LockTime = DateTime.MinValue; using (TransactionScope scope = TransactionScopeFactory.Create()) { bool updated = false; DELock lockInDB = lockInDB = Update(lockData, true, out updated); if (updated == false) { result = BuildNotAvailableResult(lockData); } else { result = BuildAvailableResult(lockInDB, true); } scope.Complete(); } return(result); }
private static DECheckLockResult BuildNotAvailableResult(DELock lockData) { DECheckLockResult result = new DECheckLockResult(); result.Lock = lockData; result.LockStatus = DECheckLockStatus.Locked; return(result); }
/// <summary> /// 延长锁的时间 /// </summary> public void ExtendLock() { DELock lockData = this._Lock; if (lockData == null) { lockData = DELock.CreateDefaultDataOperationLock(); } DECheckLockResult checkResult = DELockAdapter.Instance.ExtendLockTime(lockData); this._Lock = checkResult.Lock; }
public void AddLock(TimeSpan effectiveTime, string description) { DELock lockData = DELock.CreateDefaultDataOperationLock(); lockData.EffectiveTime = effectiveTime; lockData.Description = description; DECheckLockResult checkResult = DELockAdapter.Instance.AddLock(lockData); if (checkResult.Available == false) { throw new DECheckLockException(DECheckLockException.CheckLockResultToMessage(checkResult)); } this._Lock = checkResult.Lock; }
private static DECheckLockResult BuildAvailableResult(DELock lockData, bool overrideLock) { DECheckLockResult result = new DECheckLockResult(); result.Lock = lockData; if (overrideLock) { result.LockStatus = DECheckLockStatus.LockExpired; } else { result.LockStatus = DECheckLockStatus.NotLocked; } return(result); }
public static string CheckLockResultToMessage(DECheckLockResult checkResult) { checkResult.NullCheck("checkResult"); StringBuilder strB = new StringBuilder(); strB.AppendFormat("申请{0}失败。", EnumItemDescriptionAttribute.GetDescription(checkResult.Lock.LockType)); if (OguBase.IsNotNullOrEmpty(checkResult.Lock.LockPerson)) { strB.AppendFormat("正在由\"{0}\"执行\"{1}\"。", checkResult.Lock.LockPerson.DisplayName, checkResult.Lock.Description); } else { strB.AppendFormat("正在执行\"{0}\"", checkResult.Lock.Description); } strB.Append("请稍后再尝试。"); return(strB.ToString()); }
/// <summary> /// 加锁。返回新加的锁,或者原来锁的状态。成功与否,检查SCCheckLockResult的Available属性 /// </summary> /// <param name="lockData"></param> /// <returns></returns> public DECheckLockResult AddLock(DELock lockData) { DECheckLockResult result = null; lockData.LockTime = DateTime.MinValue; using (TransactionScope scope = TransactionScopeFactory.Create()) { //插入是否成功,判断锁是否已经存在 DELock lockInDB = Insert(lockData); if (lockInDB == null) { //更新是否成功,如果不成功,表示锁被占用。 bool updated = false; lockInDB = Update(lockData, false, out updated); if (updated == false) { result = BuildNotAvailableResult(lockInDB); } else { result = BuildAvailableResult(lockInDB, true); } } else { result = BuildAvailableResult(lockInDB, false); } scope.Complete(); } return(result); }