2016-10-05 55 views
0

我使用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); 

    } 

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

感谢所有帮助

+1

如果你想从SQL实时通知你应该签出服务代理。 –

回答

0

不使用的SqlDependency触发器,你最好的选择是在客户端的管理信息的状态,并且只使用长期持久性的SQL数据库,这样你可以得到消息的状态当用户登录时,您可以立即访问客户端的状态。