信号器无法识别SQL数据库的更新。

时间:2016-10-05 01:04:47

标签: asp.net entity-framework asp.net-core signalr signalr-hub

当您收到新消息或朋友请求时,我使用Signalr进行实时通知,当您查看它们时,它会更改" HasBeenViewed"字段在数据库中为true。

问题在于,当信号员检查新通知时,它没有看到已更改的" HasBeenViewed"该领域,它认为它仍然是假的。在数据库本身,我可以确认HasBeenViewed已被正确更改。

Signalr中的查询可以正确识别是否添加了新的消息/好友请求,或者是否已删除了一个消息/好友请求。它只是没有看到HasBeenViewed的更新值。

如果我重新启动IIS,那么Signalr最终会看到更新的HasBeenViewed值并正确显示通知。但是,如果发送并查看了新通知,则会返回到无法识别新通知上的已查看状态。

这是我的通知检查代码。使用ASP.NET Core。我从存储库查询到MS SQL数据库。

public void NotificationCheck(string userName)
    {

        var user = _repo.Query<ApplicationUser>().Where(u => u.UserName == userName).Include(u => u.FreindRequests).Include(u => u.Messages).FirstOrDefault();


        var messageCount = user.Messages.Where(m => m.HasBeenViewed == false).Count();

        var friendRequests = user.FreindRequests.Where(f => f.HasBeenViewed == false).Count();  

        Clients.Caller.notificationCount(friendRequests + messageCount);

    }

我不确定问题是什么。我猜测查询和信号器集线器之间存在一些交互,它将它存储在内存中,而不是每次都获取新信息,但我不知道该怎么做才能修复它。

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

不使用SQLDependency触发器,最好的选择是管理客户端中的消息状态,只需使用sql数据库进行长期持久化,这样就可以在用户登录时获取消息的状态,并且在客户端立即访问状态。