Есть ли способ реагировать на изменения базы данных SQL Azure? - PullRequest
0 голосов
/ 25 марта 2019

Я использую SignalR в своем приложении и чтобы реагировать на изменения базы данных, я использовал Sql Dependency

SqlDependency.Start(con);

Но я получаю следующую ошибку:

Оператор «ПОЛУЧИТЬ MSG» не поддерживается в этой версии SQL Server

Итак, насколько я понимаю, база данных SQL Azure не поддерживает компонент Service Broker.

Есть ли какое-либо решение, кроме перехода на виртуальную машину Azure?

Пример кода с зависимостью SQL:

public class NotificationComponent
{
    public void RegisterNotification(DateTime currentTime)
    {
        string conStr = ConfigurationManager.ConnectionStrings["sqlConString"].ConnectionString;
        string sqlCommand = @"SELECT [ContactID],[ContactName],[ContactNo] from [dbo].[Contacts] where [AddedOn] > @AddedOn";
        using (SqlConnection con = new SqlConnection(conStr))
        {
            SqlCommand cmd = new SqlCommand(sqlCommand, con);
            cmd.Parameters.AddWithValue("@AddedOn", currentTime);
            if (con.State != System.Data.ConnectionState.Open)
            {
                con.Open();
            }
            cmd.Notification = null;
            SqlDependency sqlDep = new SqlDependency(cmd);
            sqlDep.OnChange += sqlDep_OnChange;
            using (SqlDataReader reader = cmd.ExecuteReader())
            {

            }
        }
    }

    void sqlDep_OnChange(object sender, SqlNotificationEventArgs e)
    {
        if (e.Type == SqlNotificationType.Change)
        {
            SqlDependency sqlDep = sender as SqlDependency;
            sqlDep.OnChange -= sqlDep_OnChange;

            var notificationHub = GlobalHost.ConnectionManager.GetHubContext<NotificationHub>();
            notificationHub.Clients.All.notify("added");
            RegisterNotification(DateTime.Now);
        }
    }

    public List<Contact> GetContacts(DateTime afterDate)
    {
        using (MyPushNotificationEntities dc = new MyPushNotificationEntities())
        {
            return dc.Contacts.Where(a => a.AddedOn > afterDate).OrderByDescending(a => a.AddedOn).ToList();
        }
    }
}

1 Ответ

0 голосов
/ 25 марта 2019

Можно использовать «когда элемент создается» и «когда элемент модифицируется», чтобы SQL в приложении логики Azure реагировал на изменения данных.

Соединитель SQL в приложениях логики Azure используетмеханизм опроса для запроса таблицы на наличие изменений с использованием столбца TIMESTAMP / ROWVERSION.Этот тип данных специально разработан для такой обработки в SQL.Запрос опроса по существу выбирает все строки, где версия строки больше, чем последнее значение опроса.Поведение является надежным, поскольку столбец контролируется SQL Server, а производительность в случае отсутствия новых данных чрезвычайно высока.Когда появляются новые данные, производительность сопоставима с простым запросом строки.

Для получения дополнительной информации, пожалуйста, прочитайте эту статью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...