SignalR多次触发dependency_OnChange,它必须在DB更改时才触发一次

时间:2017-10-13 05:16:25

标签: sql sql-server-2012 signalr signalr-hub

对于每个请求,下面的代码都在我们的仪表板页面中运行。因此,在更新数据库值时,dependency.OnChange会触发更多次。 我们需要dependency.OnChange在我们的应用程序中只触发一次,即仅在初始页面加载时。

public List<DashboardFreezedColumns> GetDashboardFreezedColumns(int userId, string checkedEmpIds)
    {
        var columns = new List<DashboardFreezedColumns>();
        using (var connection = new SqlConnection(_connString))
        {
            using (var command = new SqlCommand(sqlQuery, connection))
            {
                command.CommandType = CommandType.Text;
                command.Notification = null;

                var dependency = new SqlDependency(command);
                dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);

                if (connection.State == ConnectionState.Closed)
                    connection.Open();

                using (var reader = command.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        columns.Add(item: new DashboardFreezedColumns
                        {
                            EmployeeId = (int)reader["EmployeeId"],
                            Name = (string)reader["Name"],
                            Status = (int)reader["Status"],
                            Duration = (string)reader["Duration"]
                        });
                    }
                }

                if (connection.State == ConnectionState.Open)
                    connection.Close();
            }
        }
        return columns;
    }


 private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
    {
        if (e.Type == SqlNotificationType.Change)
        {
            MessagesHub msg = new MessagesHub();
            msg.SendMessages();
        }
    }

0 个答案:

没有答案