Я решил сделать добавление в бд в другом методе класса ChatWebSocketMiddleWare, а именно Invoke(). В нем в параметрах передавался HttpContext, а также решил добавить параметр контекста доступа к бд. Всё стало работать нормально:
public async Task Invoke(HttpContext context, EnterChatContext chatContext)
        {
            if (!context.WebSockets.IsWebSocketRequest)
            {
                await _next.Invoke(context);
                return;
            }
            CancellationToken ct = context.RequestAborted;
            WebSocket currentSocket = await context.WebSockets.AcceptWebSocketAsync();
            var socketId = Guid.NewGuid().ToString();
            _sockets.TryAdd(socketId, currentSocket);
            while (true)
            {
                if (ct.IsCancellationRequested)
                {
                    break;
                }
                var response = await ReceiveStringAsync(currentSocket, ct);
                if (string.IsNullOrEmpty(response))
                {
                    if (currentSocket.State != WebSocketState.Open)
                    {
                        break;
                    }
                    continue;
                }
                int user_id = Int32.Parse(context.User.FindFirst(ClaimTypes.NameIdentifier).Value);
                int comp_id = Int32.Parse(context.User.FindFirst("CompanyID").Value);
                GroupChatMessage message = new GroupChatMessage
               {
                        UserID = user_id,
                        CompanyID = comp_id,
                        Text = response,
                        CreationDate = DateTime.Now
                };
                await chatContext.GroupChatMessages.AddAsync(message);
                await chatContext.SaveChangesAsync();
                
                foreach (var socket in _sockets)
                {
                    if (socket.Value.State != WebSocketState.Open)
                    {
                        continue;
                    }
                    await SendStringAsync(socket.Value, response, ct);
                }
            }
            WebSocket dummy;
            _sockets.TryRemove(socketId, out dummy);
            await currentSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Closing", ct);
            currentSocket.Dispose();
        }