SignalR: количество групповых клиентов становится ниже нуля

#c# #websocket #signalr #signalr-hub

#c# #websocket #signalr #signalr-концентратор

Вопрос:

У меня есть несколько страниц, которые используют SignalR. На каждой странице есть 3 группы. Я пытался сохранить запись в базе данных о количестве клиентов для каждой группы. Проблема в том, что количество клиентов в комнатах становится отрицательным числом.

Таблица базы данных выглядит следующим образом: имя_группы nvarchar(10) PK, число int не равно нулю

В моем классе Hub я использую OnConnected() и OnDisconnected() для управления количеством.

     public override Task OnConnected()
    {
        string mAsset1 = Context.QueryString["asset1"];
        string mAsset2 = Context.QueryString["asset2"];

        string body = "{0}/{1}";
        string groupName = string.Format(body, mAsset1, mAsset2);

        JoinRoom(groupName);

        SignalRClientCountCrud.AddToClientCounter(groupName); //UPDATING DATABASE

        return base.OnConnected();
    }
    public override Task OnDisconnected(bool stop)
    {
        string mAsset1 = Context.QueryString["asset1"];
        string mAsset2 = Context.QueryString["asset2"];

        string body = "{0}/{1}";
        string groupName= string.Format(body, mAsset1, mAsset2);
        
        SignalRClientCountCrud.RemoveFromClientCounter(groupName); //UPDATING DATABASE

        return base.OnDisconnected(stop);
    }
    public Task JoinRoom(string groupName)
    {
        Task result = Groups.Add(Context.ConnectionId, groupName);
        return resu<
    }
  

Добавление и удаление количества клиентов из базы данных (методы, которые я вызываю в классе Hub)

     public static void AddToClientCounter(string roomName)
    {
        List<string> rooms = GetRooms(roomName);
        using (DatabaseEntities db = DbManager.Get())
        {
            foreach (string room in rooms)
            {
                SignalRClientCount group = db.SignalRClientCounts.Where(c => c.GroupName == room).FirstOrDefault();
                if (group != null)
                {
                    group.ClientCount  ;
                }
                else
                {
                    SignalRClientCount signalRGroupCount = new SignalRClientCount();
                    signalRGroupCount.GroupName = room;
                    signalRGroupCount.ClientCount = 1;
                    db.SignalRClientCounts.Add(signalRGroupCount);
                }
                db.SaveChanges();
            }
        }
    }
    public static void RemoveFromClientCounter(string roomName)
    {
        List<string> rooms = GetRooms(roomName);

        using (DatabaseEntities db = DbManager.Get())
        {
            foreach (string room in rooms)
            {
                SignalRClientCount group = db.SignalRClientCounts.Where(c => c.GroupName == room).FirstOrDefault();
                if (group != null)
                {
                    group.ClientCount--;
                    db.SaveChanges();
                }
            }
        }
    }
  

Иногда в группе базы данных X будет иметь значение -5.