/// <summary> /// 下移角色。 /// </summary> /// <param name="role">角色实例。</param> /// <param name="cancellationToken">取消标识。</param> /// <returns>返回移动结果。</returns> public virtual async Task <bool> MoveDownAsync(TRole role, CancellationToken cancellationToken = default) { if (role == null) { throw new ArgumentNullException(nameof(role)); } // ReSharper disable once SuspiciousTypeConversion.Global if (role is IRoleEventHandler <TRole> handler) { return(await RoleContext.BeginTransactionAsync(async db => { if (!await db.MoveDownAsync(role.Id, x => x.RoleLevel, MoveExpression(role), cancellationToken)) { return false; } if (!await handler.OnUpdateAsync(db, cancellationToken)) { return false; } return true; }, cancellationToken : cancellationToken)); } return(await RoleContext.MoveDownAsync(role.Id, x => x.RoleLevel, MoveExpression(role), cancellationToken)); }