SignalR 和 sql 仅依赖于插入
本文关键字:依赖于 插入 sql SignalR | 更新日期: 2023-09-27 18:33:12
我在 asp.net mvc 5.2 中使用 signalR 和 SQL 依赖项进行实时通知我从这个链接实现SignalR
http://venkatbaggu.com/signalr-database-update-notifications-asp-net-mvc-usiing-sql-dependency/
不,我有一个问题,在这种情况下对表的任何更改,SQL依赖项运行并返回记录,我只想在表中插入SQL依赖项并返回记录,
因为在此表中,当我更新触发的归档 SQL 依赖项时,我在面板中更新了用户读取通知的位归档
,如何仅为插入表定义SQL依赖项?
谢谢你的帮助
我使用此代码
public IEnumerable<Messages> GetAllMessages()
{
var messages = new List<Messages>();
using (var connection = new SqlConnection(_connString))
{
connection.Open();
using (var command = new SqlCommand(@"SELECT [Id],[Player_Id], [Message] FROM [dbo].[Notification] WHERE [Player_Id] = " + PlayerLogin.userId + " AND PlayerIsRed = 0", connection))
{
command.Notification = null;
var dependency = new SqlDependency(command);
dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
if (connection.State == ConnectionState.Closed)
connection.Open();
var reader = command.ExecuteReader();
while (reader.Read())
{
messages.Add(item: new Messages { Id = (int)reader["Id"], Message = (string)reader["Message"], Player_Id = (int)reader["Player_Id"] });
}
}
}
return messages;
}
你可以使用你的SqlDependency 函数,如下所示:
void sqlDep_OnChange(object sender, SqlNotificationEventArgs e)
{
if (e.Type == SqlNotificationType.Change && e.Info==SqlNotificationInfo.Insert)
{
// your code
}
}
不能直接限制 SqlDependency 通知的数据更改类型。Sunil 建议的过滤器将起作用,但还有另一种解决方法可以只收到插入通知:触发器。
可以在要通知的表上放置一个插入触发器,并让该触发器在另一个表(如 PlayerNotification
)上插入记录,然后将 SqlDependency 查询指向PlayerNotification
。
CREATE TRIGGER [dbo].[NotificationTrigger] ON [dbo].[Notification]
FOR INSERT
AS
BEGIN
INSERT INTO
[dbo].[PlayerNotification] (
[Id], [Player_Id], [Message] )
SELECT DISTINCT
[Id], [Player_Id], [Message]
FROM
Inserted i
END