我使用Signalr来获取新消息或好友请求时的实时通知,当您查看它们时,它会在数据库中将“HasBeenViewed”字段更改为true。Signalr无法识别SQL数据库的更新。
问题是,当Signalr检查新的通知时,它看不到更改的“HasBeenViewed”字段,它认为它仍然是错误的。在数据库本身,我可以确认HasBeenViewed已被正确更改。
Signalr中的查询确实能够识别新消息/好友请求是否已添加,或者是否已被删除。它只是看不到HasBeenViewed的更新值。
如果我重新启动IIS,那么它最终会看到更新的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);
}
我不确定是什么问题。我猜测查询和信号集线器之间存在一些交互,它将信息存储在内存中,而不是每次都获取新信息,但我不知道如何解决它。
感谢所有帮助
如果你想从SQL实时通知你应该签出服务代理。 –