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