SignalR (v2.2.0) OnDisconnected establece el usuario fuera de línea

Estoy usando el siguiente código para agregar usuarios en el grupo y guardar usuarios en db contra este grupo en particular usando el siguiente código.

SERVIDOR:

  public class ChatHub : Hub
{


    public async Task JoinRoom(string user_Id, string room_Id, string user_Name)
    {
        AddLoginUser(room_Id, this.Context.ConnectionId, user_Id);
        await this.Groups.Add(this.Context.ConnectionId, room_Id);
    }


    public void Connect(string user_Id, string room_Id, string user_Name)
    {
        var id = Context.ConnectionId;

        Clients.Caller.onConnected(id, user_Name, GetRoomUser(room_Id), GetRoomMessage(room_Id));

        // send to all in group to update user list
        Clients.OthersInGroup(room_Id).onNewUserConnected(id, user_Name);
    }
  public override System.Threading.Tasks.Task OnDisconnected(bool stopCalled)
    {

        using (DataContext dc = new DataContext())
        {
            var item = dc.LoggedInUsers.FirstOrDefault(x => x.ConnectionId == Context.ConnectionId);
            if (item != null)
            {
                item.Connected = false;
                dc.SubmitChanges();

                Clients.OthersInGroup(item.RoomID.ToString()).onUserDisconnected(Context.ConnectionId, item.UserMaster.User_Name);
            }

            return base.OnDisconnected(stopCalled);
        }
    }
   }

 private void AddLoginUser(string room_Id, string connection_Id, string user_Id)
    {
        using (DataContext dc = new DataContext())
        {
            var checkUserLogedIn = (from user in dc.LoggedInUsers
                                    where (user.RoomID == Convert.ToInt32(room_Id) && user.UserID == Convert.ToInt32(user_Id))
                                    select user).SingleOrDefault();
            if (checkUserLogedIn == null)
            {
                LoggedInUser objLoggedInUser = new LoggedInUser();
                objLoggedInUser.ConnectionId = connection_Id;
                objLoggedInUser.UserID = Convert.ToInt32(user_Id);
                objLoggedInUser.RoomID = Convert.ToInt32(room_Id);
                objLoggedInUser.Connected = true;
                dc.LoggedInUsers.InsertOnSubmit(objLoggedInUser);
                dc.SubmitChanges();
            }
            else
            {
                if (!checkUserLogedIn.Connected)
                {
                    checkUserLogedIn.Connected = true;
                    dc.SubmitChanges();
                }
            }
        }
    }

Problema:

Supongamos que inicié sesión con userid = 1 para roomid = 1 y contextid = 123asd. Si actualizo mi ventana, contextid cambiará y ahora si cierro la pestaña del navegador, luego la siguiente consulta:

var item = dc.LoggedInUsers.FirstOrDefault(x => x.ConnectionId == Context.ConnectionId);

No descubrí el usuario contra el último ID de conexión, porque cuando había guardado el usuario en Connect en ese momento, el ID de conexión era diferente.

Cómo puedo establecer el estado conectado falso para un usuario en particular en el evento de desconexión.

Gracias por adelantado.

Respuestas a la pregunta(1)

Su respuesta a la pregunta