예제 #1
0
        /// <summary>
        /// 添加实例事务时候新建索引。
        /// </summary>
        /// <typeparam name="TParentIndex">索引类型。</typeparam>
        /// <param name="db">数据库事务操作接口实例。</param>
        /// <param name="id">当前实例Id。</param>
        /// <param name="parentId">父级Id。</param>
        /// <param name="cancellationToken">取消标志。</param>
        /// <returns>返回添加结果。</returns>
        public static async Task <bool> CreateIndexAsync <TParentIndex>(this IDbTransactionContext <TParentIndex> db, int id, int parentId, CancellationToken cancellationToken = default)
            where TParentIndex : IParentIndex, new()
        {
            //最顶级无需更新
            if (parentId <= 0)
            {
                return(true);
            }
            await db.ExecuteNonQueryAsync($@"INSERT INTO {db.EntityType.Table}(ParentId, Id) SELECT ParentId, {id} FROM {db.EntityType.Table} WITH(NOLOCK) WHERE Id = {parentId};", cancellationToken : cancellationToken);

            return(await db.CreateAsync(new TParentIndex { Id = id, ParentId = parentId }, cancellationToken));
        }
예제 #2
0
        /// <summary>
        /// 添加用户。
        /// </summary>
        /// <param name="db">当前事务实例。</param>
        /// <param name="userName">用户名称。</param>
        /// <param name="password">密码。</param>
        /// <param name="roles">角色列表,不包含默认角色。</param>
        /// <param name="parentId">父级Id。</param>
        /// <returns>返回当前用户Id。</returns>
        protected async Task <int> CreateAsync(IDbTransactionContext <TUser> db, string userName, string password, List <TRole> roles, int parentId)
        {
            var user = new TUser();

            user.UserName           = userName;
            user.PasswordHash       = password;
            user.NickName           = user.UserName;
            user.NormalizedUserName = UserManager.NormalizeName(user.UserName);
            user.PasswordHash       = UserManager.HashPassword(user);
            user.ParentId           = parentId;

            if (!await db.CreateAsync(user))
            {
                Logger.LogCritical("添加用户实例失败:{0}", userName);
                return(0);
            }

            foreach (var handler in _handlers)
            {
                if (!await handler.OnCreatedAsync(db, user))
                {
                    Logger.LogCritical("触发用户事件失败:{0},类型:{1}", userName, handler.GetType().FullName);
                    return(0);
                }
            }

            var urdb = db.As <TUserRole>();

            foreach (var role in roles)
            {
                if (!await urdb.CreateAsync(new TUserRole {
                    RoleId = role.Id, UserId = user.Id
                }))
                {
                    Logger.LogCritical("添加用户角色失败:{0}({2}),角色:{1}({3})", userName, role.Name, user.Id, role.Id);
                    return(0);
                }
            }

            var maxRole = roles.OrderByDescending(x => x.RoleLevel).First();

            user.RoleId = maxRole.Id;
            if (await db.UpdateAsync(user.Id, new { user.RoleId }))
            {
                return(user.Id);
            }

            Logger.LogCritical("添加用户最高角色失败:{0},角色:{1}", userName, maxRole.Name);
            return(0);
        }