/// <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)); }
/// <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); }