2016-10-05 68 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數據庫,這樣你可以得到消息的狀態當用戶登錄時,您可以立即訪問客戶端的狀態。