【问题标题】:SignalR and sql dependency only on insertSignalR 和 sql 仅依赖于插入
【发布时间】:2019-05-25 03:54:17
【问题描述】:

我在 asp.net mvc 5.2 中使用 signalR 和 SQL Dependency 进行实时通知 我从这个链接实现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;
        }

【问题讨论】:

    标签: c# asp.net sql-server signalr


    【解决方案1】:

    您可以使用类似的 SqlDependency 函数:-

         void sqlDep_OnChange(object sender, SqlNotificationEventArgs e)
                {
                    if (e.Type == SqlNotificationType.Change && e.Info==SqlNotificationInfo.Insert)
                    {
                        // your code
                    }
                }
    

    【讨论】:

      【解决方案2】:

      您不能直接限制 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
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 2019-12-03
      • 2015-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多