public async Task <UserItemDto> UpdateUserAsync(ItemId itemId, UserItemDto dto) { var users = await _stateManager.GetOrAddAsync <IReliableDictionary <ItemId, UserItem> >(DictionaryName); using (var tx = _stateManager.CreateTransaction()) { var current = await users.TryGetValueAsync(tx, itemId); if (current.HasValue) { UserItem item = null; if (dto.Username != null) { item = current.Value.UpdateUsername(dto.Username); } if (dto.Password != null) { item = item == null?current.Value.UpdatePassword(dto.Password) : item.UpdatePassword(dto.Password); } if (dto.Name != null) { item = item == null?current.Value.UpdateName(dto.Name) : item.UpdateName(dto.Name); } if (dto.Mobile != null) { item = item == null?current.Value.UpdateMobile(dto.Mobile) : item.UpdateMobile(dto.Mobile); } if (dto.MobileConfirmed.HasValue) { item = item == null?current.Value.UpdateMobileConfirmed(dto.MobileConfirmed.Value) : item.UpdateMobileConfirmed(dto.MobileConfirmed.Value); } if (dto.Email != null) { item = item == null?current.Value.UpdateEmail(dto.Email) : item.UpdateEmail(dto.Email); } if (dto.HasAdUser.HasValue) { item = item == null?current.Value.UpdateHasAdUser(dto.HasAdUser.Value) : item.UpdateHasAdUser(dto.HasAdUser.Value); } if (dto.DepartmentId != null) { item = item == null?current.Value.UpdateDepartmentId(dto.DepartmentId) : item.UpdateDepartmentId(dto.DepartmentId); } if (dto.EmailConfirmed.HasValue) { item = item == null?current.Value.UpdateEmailConfirmed(dto.EmailConfirmed.Value) : item.UpdateEmailConfirmed(dto.EmailConfirmed.Value); } if (dto.Avatar != null) { item = item == null?current.Value.UpdateAvatar(dto.Avatar) : item.UpdateAvatar(dto.Avatar); } if (dto.IdCardNo != null) { item = item == null?current.Value.UpdateIdCardNo(dto.IdCardNo) : item.UpdateIdCardNo(dto.IdCardNo); } if (dto.EmployeeNumber != null) { item = item == null?current.Value.UpdateEmployeeNumber(dto.EmployeeNumber) : item.UpdateEmployeeNumber(dto.EmployeeNumber); } if (dto.IsActive.HasValue) { item = item == null?current.Value.UpdateIsActive(dto.IsActive.Value) : item.UpdateIsActive(dto.IsActive.Value); } if (dto.IsLockoutEnabled.HasValue) { item = item == null?current.Value.UpdateIsLockoutEnabled(dto.IsLockoutEnabled.Value) : item.UpdateIsLockoutEnabled(dto.IsLockoutEnabled.Value); } if (item != null) { await users.SetAsync(tx, itemId, item); await tx.CommitAsync(); await LogAndPublishUpdateEvent(item); return(_mapper.Map <UserItemDto>(item)); } } } return(null); }