public async Task <ChatRoomViewModel> Update(string applicationUserIdCurrent, ChatRoomViewModel chatRoomViewModel)
        {
            var applicationUserIds = chatRoomViewModel.Users.Select(u => u.ApplicationUserId).Concat(new string[] { applicationUserIdCurrent }).ToList();
            var chatRoomEntity     = mapper.Map <ChatRoomViewModel, ChatRoomEntity>(chatRoomViewModel);

            chatRoomEntity = repositoryOfChatRoom.Read(a => a.Id == chatRoomEntity.Id);
            // delete
            chatRoomEntity.UserChats
            .TakeWhile(userChat => !applicationUserIds.Any(applicationUserId => applicationUserId == userChat.UserProfile.ApplicationUserId))
            .ToList()
            .ForEach(async a => await repositoryOfUserChat.Delete(a));
            // create
            chatRoomEntity.UserChats = applicationUserIds
                                       .TakeWhile(applicationUserId => !chatRoomEntity.UserChats.Any(userChat => userChat.UserProfile.ApplicationUserId == applicationUserId))
                                       .Select(applicationUserId => {
                var user             = repositoryOfUserProfile.Read(b => b.ApplicationUserId == applicationUserId);
                var UserChat         = new UserChatEntity();
                UserChat.ChatRoom    = chatRoomEntity;
                UserChat.ChatRoomId  = chatRoomEntity.Id;
                UserChat.UserId      = user.Id;
                UserChat.UserProfile = user;
                return(UserChat);
            });
            chatRoomEntity    = repositoryOfChatRoom.Update(chatRoomEntity);
            chatRoomViewModel = mapper.Map <ChatRoomEntity, ChatRoomViewModel>(chatRoomEntity);
            return(chatRoomViewModel);
        }
        public async Task <ChatRoomViewModel> Create(string applicationUserIdCurrent, ChatRoomViewModel chatRoomViewModel)
        {
            var applicationUserIds = chatRoomViewModel.Users.Select(u => u.ApplicationUserId).Concat(new string[] { applicationUserIdCurrent }).ToList();
            var chatRoomEntity     = mapper.Map <ChatRoomViewModel, ChatRoomEntity>(chatRoomViewModel);

            chatRoomEntity           = repositoryOfChatRoom.Create(chatRoomEntity);
            chatRoomEntity.UserChats = applicationUserIds.Select(a => {
                var user             = repositoryOfUserProfile.Read(b => b.ApplicationUserId == a);
                var UserChat         = new UserChatEntity();
                UserChat.ChatRoom    = chatRoomEntity;
                UserChat.ChatRoomId  = chatRoomEntity.Id;
                UserChat.UserId      = user.Id;
                UserChat.UserProfile = user;
                return(repositoryOfUserChat.Create(UserChat));
            }).ToList();
            chatRoomViewModel = mapper.Map <ChatRoomEntity, ChatRoomViewModel>(chatRoomEntity);
            return(chatRoomViewModel);
        }