【发布时间】:2017-08-22 06:16:14
【问题描述】:
我正在使用 ASP.NET MVC 5 和 SQL Server 2016 在我的应用程序中进行简单的聊天。 在数据库中得到下表:
[dbo].[UserMessages](
[Id] [int] IDENTITY(1,1) NOT NULL,
[UserIdSender] [int] NOT NULL,
[UserIdReciever] [int] NOT NULL,
[DateSent] [datetime] NOT NULL,
[MessageText] [nvarchar](max) NULL,
[IsRead] [int] NOT NULL
因此,当一个用户向另一个用户 [UserIdReciever] 发送消息 [UserIdSender] 时,第二个用户将在打开他的聊天选项卡时看到它,因为将完成对 db 的以下请求:
public IQueryable<UserMessages> GetDialogByUserIds(int senderId, int recieverId)
{
return _msgRepo.GetAllQueryable(m => (m.UserIdSender == senderId && m.UserIdReciever == recieverId) ||
(m.UserIdSender == recieverId && m.UserIdReciever == senderId));
}
问题是保持实时聊天,所以当第二个用户回答第一个时,第一个用户会立即看到它。所以,我在想有没有办法在更改特定表时在 sql 中创建特定事件 在 sql 中是这样的:
if(UserMessages.IsChanged())
{
event UserMessagesChanged();
}
或者有没有更好的方法来通知用户传入的消息,而不是每次更改数据库时都发送请求,因为有很多用户,并且每次任何用户发送消息时都会触发此事件?
【问题讨论】:
-
看看SignalR
标签: c# sql asp.net sql-server asp.net-mvc