ABP升级后,大概3.6.1之后,在.net framework里面,从官方下载的Module zero模板添加角色是出现下面错误。数据库
这个问题,算是新版apb的一点小缺憾,好像在.net core的模板里面没问题。解决方案:app
public override async Task Create(CreateRoleDto input) { CheckCreatePermission(); var role = ObjectMapper.Map<Role>(input); CheckErrors(await _roleManager.CreateAsync(role)); var grantedPermissions = PermissionManager .GetAllPermissions() .Where(p => input.Permissions.Contains(p.Name)) .ToList(); //加上下面代码 //await CurrentUnitOfWork.SaveChangesAsync(); await UnitOfWorkManager.Current.SaveChangesAsync(); //这行是后来加的不晓得拼写错误没有,有错本身修正,反正大概是这样 await _roleManager.SetGrantedPermissionsAsync(role, grantedPermissions); return MapToEntityDto(role); }
报错缘由:由于uow是事物提交的,虽然调用了createasync,但事物未提交,数据没有保存到数据库,后面执行分配权限获取不到改角色的id,因此报错。async
貌似是由于在.net core里面,执行了XX.CreateAsync()后,若是后面的代码会用到当前实体,就会自动提交事务,但.netframework里面不行,因此在分配权限以前咱们要先手动savechange。ide